java與數據庫oracle連接學習之jdbc(5)代碼包裝成一個公共類

增刪改的工具類

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.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 通用的DAO,可以對任意表做增刪改
 */
public   abstract  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<T> queryBeenList(String sql,Object ...paramas){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        List<T>lst =new ArrayList<>();
        T tmp =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();
            while(resultSet.next()){
                tmp = getBeanFromResultSet(resultSet);
                lst.add(tmp);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally {
           close(resultSet,preparedStatement,connection);
        }
        return lst;
    }

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

    //抽象方法,誰繼承就轉換爲對應類型
     public abstract T getBeanFromResultSet(ResultSet resultSet) throws SQLException;
}

應用

//學習鏈接: https://www.bilibili.com/video/BV14E411Q7wJ?p=2
package com.librarySystem;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

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[]) {
        System.out.print(new ConnnectDatabase().queryById("R011"));
    }

    @Override
    public Reader getBeanFromResultSet(ResultSet resultSet) throws SQLException {
        Reader reader= new Reader();
        reader.setRno(resultSet.getString("RNO"));
        reader.setRname(resultSet.getString("RNAME"));
        reader.setRsex( resultSet.getString("RSEX"));
        reader.setRage(resultSet.getInt("RAGE"));
        reader.setRboss(resultSet.getString("RBOSS"));
        reader.setRaddress(resultSet.getString("RADDRESS"));
        return reader;
    }

    public  List<Reader>queryAll(){
        String sql ="Select * from reader";
        return queryBeenList(sql);
    }
    public Reader queryById(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);});
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章