JDBC_day03 批處理 預編譯的批處理執行insert 語句 addBatch(); 非預編譯批處理 預編譯批處理 JDBC事務 所謂事務就是所有的sql操作要麼一起成功,要麼一起失敗,類似於銀行一個賬戶給另一個賬戶轉賬. 事務的特性 : 原子性,一致性,隔離性或獨立性,持久性 步驟: 1. ...
JDBC_day03
String a = "abc"; **效率高 , 常量池**
String b = "abc";
System.out.println(a==b);//true
System.out.println(a.equals(b));//true
String A = new String("abc");//創建了一個或兩個對象(池中有,創建一個,池中沒有 創建兩個)
String B = new String("abc");
System.out.println(A==B);//false
System.out.println(A.equals(B));//true
System.out.println(A==b);//false
System.out.println(A.equals(b));//true
批處理
- 預編譯的批處理執行insert 語句
- addBatch();
非預編譯批處理
String sql1 = "update copy_emp set salary=salary+'" + count +"'where employee_id='"+empIDA+"'";
String sql2 = "update copy_emp set salary=salary-'" +count +"' where employee_id='"+empIDB+"'";
Statement stmt = conn.createStatement();
stmt.addBatch(sql1);
stmt.addBatch(sql2);
int[] arr = stmt.executeBatch();
System.out.println(arr[0]+","+arr[1]);//1,1
預編譯批處理
String sql = "insert into t_student(stu_name,stu_age) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "小剛!");
pstmt.setInt(2, 3);
pstmt.addBatch();
pstmt.setString(1, "小虎!!");
pstmt.setInt(2, 4);
pstmt.addBatch();
int[] arr = pstmt.executeBatch();
//只要輸出不為0,就說明有影響行數
System.out.println(arr[0] + "," + arr[1]);//-2 , -2
JDBC事務
所謂事務就是所有的sql操作要麼一起成功,要麼一起失敗,類似於銀行一個賬戶給另一個賬戶轉賬.
事務的特性 : 原子性,一致性,隔離性或獨立性,持久性
步驟:
- 取消掉Connection中設置的自動提交方式:conn.setAutoCommit(false) ;
- 如果批處理操作成功,則執行提交事務:conn.commit() ;
如果操作失敗,則肯定會引發異常,在異常處理中讓事務回滾:conn.rollback() ;
Connection conn = DBUtil.getConnection();
try {
conn.setAutoCommit(false);
int i = DBUtil.updateSql("update copy_emp set salary=salary+'" + count +"'where employee_id='"+empIDA+"'");
int j = DBUtil.updateSql("update copy_emp set salarys=salary-'" +count +"' where employee_id='"+empIDB+"'");
System.out.println(i+","+j);
conn.commit();
} catch (SQLException e2) {
try {
conn.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
元數據
就是描述資料庫對象的結構的數據。
- DatabaseMetaData 資料庫的元數據,如資料庫的名稱,版本等
- ResultSetMetaData 查詢結果的元數據, 如查詢結果中欄位數量(列數), 某欄位名稱等
//資料庫元數據
DatabaseMetaData dbmd = conn.getMetaData();
int i = dbmd.getDatabaseMajorVersion();
System.out.println("資料庫主版本 : " + i);//10
int j = dbmd.getDatabaseMinorVersion();
System.out.println("資料庫次版本 : " + j);//2
String name = dbmd.getDatabaseProductName();
System.out.println("資料庫名字 : " + name);//Oracle
String version = dbmd.getDatabaseProductVersion();
/*Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options*/
System.out.println("資料庫版本 : " + version);
//結果集元數據
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int column = rsmd.getColumnCount();
System.out.println(column);
for(int i = 1 ; i <= column ; i++) {
//列印所有欄位名稱
System.out.println(rsmd.getColumnName(i));
}
while(rs.next()) {
for(int i = 1 ; i <= column ; i++) {
//列印所有數據
System.out.print(rs.getString(i)+"\t");
}
System.out.println();
}