1.DriverManager用來建立和資料庫的鏈接以及管理JDBC驅動程式 driverManager的常用方法 2.Connection代表Java程式和資料庫的連接 Connection的常用方法 3.Statement用來執行靜態的SQL語句。例如:對於insert,update和delet ...
1.DriverManager用來建立和資料庫的鏈接以及管理JDBC驅動程式
driverManager的常用方法
方法 | 描述 |
registerDriver(Driver driver) | 在DerverManager中註冊JDBC驅動程式 |
getConnection(String url,String user,String pwd) | 建立和資料庫的連接,返回Connection對象 |
setLoginTime(int seconds) | 設定等待資料庫連接的最長時間 |
setLogWriter(PrintWriter out) | 設定輸出資料庫日誌的PrintWriter對象 |
2.Connection代表Java程式和資料庫的連接
Connection的常用方法
方法 | 描述 |
getMetaData() | 獲取一個 DatabaseMetaData 對象,該對象包含關於此 Connection 對象所連接的資料庫的元數據。例如當前資料庫連接的用戶名,資料庫的最大連接數,以及資料庫的版本等。 |
createStatement() | 創建並返回Statement對象 |
prepareStatement(String sql) | 創建一個 PreparedStatement 對象來將參數化的 SQL 語句發送到資料庫。 |
3.Statement用來執行靜態的SQL語句。例如:對於insert,update和delete語句,可以調用executeUpdate(String sql)的方法;對於select語句,可以調用executeQuery(String sql方法),這個方法返回一個ResultSet對象。
例如:
String sql="select id,name,title,price from books where name='tom' and price=40";
ResultSet rs=stmt.executeQuery(sql);//stmt為Statement對象
4.PreparedStatement用來執行動態的SQL語句。
例如:
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();
5.ResultSet表示select語句查詢得到的記錄集合。
(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();
}