(一)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);