JDBC

 (一)JDBC之事務相關概念

1)概念:事務使指一組最小邏輯操作單元,裏面有多個操作組成。組成事務的每一部分必須要同時提交成功,如果有一個操作失敗,整個操作就回滾。

2)事務ACID特性:

1.原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。原子性是一個最小邏輯操作單元 。 

2.一致性(Consistency)
事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。

3.隔離性(Isolation)
事務的隔離性是多個用戶併發訪問數據庫時,數據庫爲每一個用戶開啓的事務,不能被其他事務的操作數據所幹擾,多個併發事務之間要相互隔離。

4.持久性(Durability)
持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。事務與事務之間是隔離的。 

(二)JDBC之批處理

批處理:一次性處理大量數據.

批處理相關方法:

void addBatch(String sql) 添加批處理

void clearBatch()  清空批處理

int[]executeBatch() 執行批處理

代碼:

        ArrayList<User> list = new ArrayList<User>();
        for(int i=0;i<100;i++){
            User user = new User(i,"張三"+i);
            list.add(user);
        }
        //把這100個用戶添加到數據庫裏面去
        Connection conn = JDBCUtil.getConnection();
        String sql="insert into student values(?,?)";
        PreparedStatement statement = conn.prepareStatement(sql);
        //用批處理來執行
        for(User u:list){
            statement.setInt(1,u.getId());
            statement.setString(2, u.getUsername());
            //調用批處理
            statement.addBatch();
        }
        //執行批處理
        statement.executeBatch();
        //清空批處理
        statement.clearBatch();
        //釋放資源
        JDBCUtil.close(conn, statement);

(三)連接池

     連接池:是創建和管理一個連接的緩衝池的技術,這些連接準備好被任何需要它們的線程使用。當一個線程需要用JDBC對數據庫進行操作時,它從池中請求一個連接。當這個線程使用完了這個連接,將它返回到連接池中,這樣它就可以被想要使用它的線程使用。連接池可以極大的改善用戶的JAVA應用程序的性能。

1)C3P0:是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。要求必須掌握並熟練運用

使用步驟:

1.導入jar包(c3p0-0.9.1.2.jar)

2.BasicDataSource ds = new BasicDataSource();
        設置參數
            ds.setDriverClassName("com.mysql.jdbc.Driver");
            ds.setUrl("jdbc:mysql:///mydb_01");
            ds.setUsername("root");
            ds.setPassword("root");
        獲取預編譯對象
            Connection conn = ds.getConnection();
            String sql="insert into student values(?,?)";
       
        PreparedStatement statement = conn.prepareStatement(sql);
        statement.setNull(1,Types.INTEGER);
        statement.setString(2,"王五");//括號內的參數:(問號的序號,值)
        statement.executeUpdate();
      
         ds.close();

2)dbutils:是apache組織的一個工具類,jdbc的框架,更方便我們使用,需要配合c3p0去使用
使用步驟:
1.導入jar包(commons-dbutils-1.4.jar)
2.創建一個QueryRunner類
    QueryRunner:操作sql語句
      構造器:new QueryRunner(Datasource ds);
      底層幫助創建連接,創建語句執行者 ,釋放資源.
      常用方法:query(..):update(..):
3.編寫sql
4.執行sql:query(..);  update(...);
  
執行查詢後返回的結果集
    ResultSetHandler:封裝結果集 接口
    BeanListHandler, 將查詢結果的每一條記錄封裝成指定的bean對象,將每一個bean對象放入list中 返回.

    

    ComboPooledDataSource ds = new ComboPooledDataSource();
        QueryRunner runner = new QueryRunner(ds);
        String sql = "insert into student values(4,'張三')";
        sql = "select * from student";
        // 查詢出所有數據 封裝爲對象 再把對象裝到集合裏面去
        List<User> list = runner.query(sql, new BeanListHandler<>(User.class));
        System.out.println(list);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章