JDBC編程的基本步驟是設(shè)置數(shù)據(jù)源、加載JDBC驅(qū)動器程序、指定數(shù)據(jù)庫、打開數(shù)據(jù)庫連接、提交查詢、處理查詢結(jié)果等。 1.statement對象 private Map getsysIdAndNameMap(ConnectionManager cm){ 2:PreparedStatement 2.1.使用PreparedStatement進行預編譯操作 在前面已經(jīng)學過,Statement是一個實現(xiàn)Statement接口的類的對象,用于將SQL語句發(fā)送到數(shù)據(jù)庫中。當一個Statement對象被創(chuàng)建時,它提供了一個創(chuàng)建SQL查詢、執(zhí)行該查詢和檢索返回結(jié)果的作用。 2.2. PreparedStatement簡介 PreparedStatement接口繼承自Statement,與Statement相比,PreparedStatement增加了在執(zhí)行SQL調(diào)用之前,將輸入?yún)?shù)綁定到SQL調(diào)用中的功能。它用于執(zhí)行帶或不帶輸入?yún)?shù)的預編譯SQL語句。因為PreparedStatement對象已編譯過,所以執(zhí)行速度要快于Statement對象。因此當需要多次調(diào)用一條SQL語句時,可以考慮使用PreparedStatement接口。 PreparedStatement接口繼承了Statement的所有方法,同時還增加了一些方法,還更改了以下3個很重要的方法。 setXXX() executeQuery() executeUpdate() 其中setXXX()方法中的XXX指的是該參數(shù)對應(yīng)的類型。例如參數(shù)是String類型,則方法為setString()。setXXX()方法有兩個參數(shù),第1個參數(shù)是指要設(shè)置參數(shù)的位置,第2個是指要設(shè)置的具體值。還以開始時舉的例子為例: 如果基本數(shù)據(jù)庫和驅(qū)動程序在語句提交之后仍保持這些語句的打開狀態(tài),則同一個 PreparedStatement可執(zhí)行多次。如果這一點不成立,那么試圖通過使用PreparedStatement 對象代替Statement對象來提高性能是沒有意義的。 2.3.使用示例 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 3:ResultSet 對象 ResultSet rs = stmt.executeQuery("select distinct logid from stat_data"); 4事務(wù)操作: 1. 概述: 在jdbc的數(shù)據(jù)庫操作中,一項事務(wù)是由一條或是多條表達式所組成的一個不可分割的工作單元。我們通過提交commit()或是回滾rollback()來結(jié)束事務(wù)的操作。關(guān)于事務(wù)操作的方法都位于接口java.sql.Connection中。 2. 特點: try { conn = DriverManager.getConnection (jdbc:oracle:thin:@host:1521:SID,username,userpwd; conn.setAutoCommit(false);//禁止自動提交,設(shè)置回滾點 stmt = conn.createStatement(); stmt.executeUpdate(“alter table …”); //數(shù)據(jù)庫更新操作1 stmt.executeUpdate(“insert into table …”); //數(shù)據(jù)庫更新操作2 conn.commit(); //事務(wù)提交 }catch(Exception ex) { ex.printStackTrace(); try { conn.rollback(); //操作不成功則回滾 }catch(Exception e) { e.printStackTrace(); } } |
|