driverManager的常用方法
方法 描述 registerDriver(Driver driver) 在DerverManager中注冊JDBC驅動程序 getConnection(String url,String user,String pwd) 建立和數據庫的連接,返回Connection對象 setLoginTime(int seconds) 設定等待數據庫連接的最長時間 setLogWriter(PrintWriter out) 設定輸出數據庫日志的PrintWriter對象Connection的常用方法
方法 描述 getMetaData() 獲取一個DatabaseMetaData
對象,該對象包含關於此 Connection
對象所連接的數據庫的元數據。例如當前數據庫連接的用戶名,數據庫的最大連接數,以及數據庫的版本等。
createStatement()
創建並返回Statement對象
prepareStatement(String sql)
創建一個 PreparedStatement
對象來將參數化的 SQL 語句發送到數據庫。
例如:
String sql="select id,name,title,price from books where name='tom' and price=40";
ResultSet rs=stmt.executeQuery(sql);//stmt為Statement對象
例如:
String sql="select id,name,title,price from books where name=? and price=?";
在這種情況,用PreparedStatement比Statement更方便,因為PreparedStatement允許sql語句中包含參數。
PreparedStatement具體使用如下:
(1)生產PreparedStatement對象。例如:SQL語句中name的值和price的值都用"?"來替代,他們表示兩個可以被替換的參數:
String sql="select id,name,title,price from books where name=? and price=?";
PrepareStatement prepStmt=conn.prepareStatement(sql);
(2)調用PreparedStatement的setxxx方法,給參數賦值:
prepStmt.setString(1,"tome");
prepStmt.setString(2,40);
(3)執行SQL語句:
ResultSet=prepStmt.executeQuery();
(1)ResultSet的記錄行號從1開始,一個Statement對象在同一時刻只能打開一個ResultSet對象。調用ResultSet的next()方法可以使游標定位到下一條記錄。調用ResultSet的getxxx()方法可以取得某個字段的值。
(2)ResultSet既可以通過字段的序號來指定字段,也可以通過字段的名字來指定字段。
例如:
String sql="select id,name,title,price from books where name='tome' and price=40";
ResultSet rs=stmt.executeQuery(sql);
如果要訪問id字段,可以用
rs.getString(1); 或者rs.getString("id");
如果要取出ResultSet中所有記錄,可以采用下面的循環語句:
while(rs.next()){
String col1=rs.getString(1);
String col2=rs.getString(2);
String col3=ts.getString(3);
float col4=rs.getFloat(4);
}
6.總結介紹JDBC訪問數據庫的步驟
(1)裝載並注冊數據庫JDBC驅動程序,(其中JDBC-ODBC Driver是在JDK中自帶的,默認已經注冊,所以不需要再注冊)
//裝載JdbcOdbcDriver.class(只需要裝載,不需要注冊)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//裝載並注冊SQLServerDriver
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
//裝載並注冊OracleDriver
Class.forName("oracle.jdbc.driver.OracleDriver");
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//裝載並注冊MySQLDriver
Class.forName("com.mysql.jdbc.Driver");
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//這個注冊不上必要的
說明:
對於mysql的驅動程序類com.mysql.jdbc.Driver,在JVM加載這個類時,會執行以下靜態代碼
static{
try{
java.sql.DriverManager.registerDriver(new Driver());
}catch(){
throw new RuntimeException("..");
}
....
}
所以程序中只要通過Class.forName方法加載mysql driver類即可,可以不需要再注冊。
(2)建立與數據庫的連接
Connection conn=java.sql.DriverManager.getConnection(url,user,password);
mysql: url="jdbc:mysql://localhost:3306/dbName";
(3)創建Statement對象,准備調用SQL語句
Statement stmt=conn.createStatement();
(4)調用SQL語句:
String sql="select id,name,title,price from books where name='tom' and price=40";
ResultSet rs=stmt.executeQuery(sql);
(5)訪問ResultSet中的記錄集
(6)一次關閉 ResultSet,Statement和Connection對象:
rs.close();
stmt.close();
conn.close();
7.事務處理
(1)在Connection類中提供了3個控制事物的方法:
setAutoCommit(boolean autoCommit);設置是否自動提交事物
commit();提交事物
rollback();回滾事物
(2)在DJBC API中,默認情況下為自動提交事物。可以通過調用setAutoCommit(false)來禁止提交事物。
try{
con.java.sql.DriverManager.getConnection(dbUrl,user,dbPwd);
//禁止自動提交,設置回滾點
con.setAutoCommit(false);
stmt=con.createStatement();
//數據庫更新操作1
stmt.executeUpdate("update account set money=money-1000 where name='zhangsan'");
//數據庫更新操作2
stmt.executeUpdate("update account set money=money+1000 where name='lisi'");
//事物提交
con.commit();
}catch(Exception e){
e.printStackTrace();
//操作不成功事物回滾
con.rollback();
}finally{
stmt.close();
con.close();
}