java與數據庫oracle連接學習之jdbc(6)改進讀取信息的方法

公共類

package com.librarySystem;

import java.sql.*;

/**
 * JDBC的工具類:
 * 加載驅動:只需要加載一次
 * 建立連接:
 * 釋放資源:
 */

public class JDBCUTILS {
    private static final String DRIVER = "oracle.jdbc.OracleDriver";
    // 主機地址 連接本機 localhost  或者127.0.0.1
    // 端口號 Oracle 數據庫默認端口號 1521
    // 實例名 安裝全的是orcl,沒有安裝全的是XE
    private static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";   // jdbc:oracle:thin: @主機地址 :  端口號 : 實例名
    private static String USER = "cc";
    private static String PASSWORD = "ccpassword";
    static {//因爲驅動只需要加載一次,所以在靜態語句中進行
        try {
            Class.forName(DRIVER);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     *建立與數據庫的連接
     * @return 連接好的連接
     */
    public static Connection getConnection(){
        try {
            Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
           return  connection;
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 釋放資源
     * @param resultSet 結果集
     * @param statement 語句對象
     * @param connection 連接
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection){//查詢時
        try
        {
            if (resultSet != null && !resultSet.isClosed())
                resultSet.close();
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                if (statement != null && !statement.isClosed())
                    statement.close();
            }
            catch (SQLException ex)
            {
                ex.printStackTrace();
            }
            finally
            {
                try
                {
                    if (connection != null && !connection.isClosed())
                        connection.close();
                }
                catch(SQLException ex)
                {
                    ex.printStackTrace();;
                }
            }
        }
    }

    /**
     * 釋放資源
     * @param statement 語句對象
     * @param connection 連接
     */
    public static void close(Statement statement, Connection connection){//增刪改
        close(null,statement,connection);
    }
}

改進讀取的公共類

package com.librarySystem;

import java.sql.*;
import java.util.*;

/**
 * 通用的DAO,可以對任意表做增刪改
 */
public     class CommonDao<T> extends JDBCUTILS {
    /**
     * 對任意表做增刪改,根據增刪改的字符串或數字不同操作
     * @return
     */

    public static int executeUpdate(String sql,Object ...params){
        Connection conn =null;
        PreparedStatement preparedStatement =null;
        int i=0;
        try {
            //獲取連接
            conn = getConnection();
            //創建語句對象
            preparedStatement = conn.prepareStatement(sql);
            if(params!=null && params.length>0){//判斷需要佔位符
                for(int j=0;j<params.length;j++){
                    //設置佔位符
                    preparedStatement.setObject(j+1,params[j]);
                }
            }
             i = preparedStatement.executeUpdate();//成功爲1
        }catch(SQLException e){
            e.printStackTrace();
        }finally {//釋放資源
            close(preparedStatement,conn);
        }
        return i;
    }

    public List<Map<String,Object>> queryBeenList(String sql, Object ...paramas){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        List<Map<String,Object>>lst =new ArrayList<>();
        Map<String,Object>map =null;
        try{
            //獲取連接
            connection = getConnection();
            //創建語句對象
            preparedStatement = connection.prepareStatement(sql);
            if(paramas!=null&&paramas.length>0){//需要設置佔位符
                for(int i=0;i<paramas.length;i++){
                    preparedStatement.setObject(i+1,paramas[i]);
                }
            }
            //執行SQL語句
            resultSet = preparedStatement.executeQuery();
            //處理結果集
            //通過metaData獲取元數據個數
            ResultSetMetaData resultSetMetaData =resultSet.getMetaData();
            int columnCont = resultSetMetaData.getColumnCount();
            String[]columnNames =new String[columnCont];//元數據名稱數組
            for(int i=0;i<columnCont;i++){
                columnNames[i]=resultSetMetaData.getColumnName(i+1);
            }
            while(resultSet.next()){
                map =new HashMap<>();
                for(int i=0;i<columnCont;i++){
                    String columnName = columnNames[i];
                    map.put(columnNames[i],resultSet.getObject(columnName));
                }
                lst.add(map);
            }
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        finally {
           close(resultSet,preparedStatement,connection);
        }
        return lst;
    }

    public Map<String,Object> queryBeen(String sql,Object ...params){
       List< Map<String,Object>>lst= queryBeenList(sql,params);
       if(lst.size()>0){
           return lst.get(0);
       }
       return null;
    }

}

實驗類

//學習鏈接: https://www.bilibili.com/video/BV14E411Q7wJ?p=2
package com.librarySystem;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

class Reader {
    private String rno;
    private String rname;
    private String rsex;
    private int rage;
    private String rboss;
    private String raddress;

    public String getRno() {
        return rno;
    }

    public String getRname() {
        return rname;
    }

    public String getRsex() {
        return rsex;
    }

    public int getRage() {
        return rage;
    }

    public String getRaddress() {
        return raddress;
    }

    public String getRboss() {
        return rboss;
    }

    public void setRno(String rno) {
        this.rno = rno;
    }

    public void setRname(String rname) {
        this.rname = rname;
    }

    public void setRsex(String rsex) {
        this.rsex = rsex;
    }

    public void setRage(int rage) {
        this.rage = rage;
    }

    public void setRboss(String rboss) {
        this.rboss = rboss;
    }

    public void setRaddress(String raddress) {
        this.raddress = raddress;
    }

    public String toString() {
        return rno + " " + rname + " " + rsex + " " + rage + " " + rboss + " " + raddress;
    }
}

public class ConnnectDatabase extends CommonDao<Reader> {
    /**
     * 查詢數據庫中資源對象
     *
     * @return 對象集合
     */

    public static int doInsert(Reader reader) {
        String sql = "Insert into reader values('R011','George','男',?,null,?)";
        return executeUpdate(sql, reader.getRage(), reader.getRaddress());
    }

    public static int doDelete(String rno) {
        String sql = "Delete from reader where rno=?";
        return executeUpdate(sql, rno);
    }

    public static int doUpdate(Reader reader) {
        String sql = "Update reader set rname=?,rage=? where rno=?";
        return executeUpdate(sql, reader.getRname(), reader.getRage(), reader.getRno());
    }

    public static void main(String args[])
    {
        Map<String,Object>map = new ConnnectDatabase().queryByRno("R001");
        System.out.println(map);
    }


    public List<Map<String,Object>> queryAll() {
        String sql = "Select * from reader";
        return queryBeenList(sql);
    }

    public Map<String,Object>queryByRno(String rno) {
        String sql = "Select * from reader where rno=?";
        return queryBeen(sql, rno);
    }
}



/*
遍歷列表
List<Reader> lst = queryALL();
        Iterator<Reader>it = lst.iterator();
        String tmp =null;
        while(it.hasNext()){
            tmp = ((Reader)it.next()).rname;
            System.out.println(tmp);
        }

 queryALL().forEach(str->
                {System.out.println(str);});
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章