JDBC簡介
l 資料庫驅動
SUN公司為了簡化、統一對資料庫的操作,定義了一套Java運算元據庫的規範,稱之為JDBC
l JDBC 全稱為: Java Data Base Connectivity ( java 資料庫連線),它主要由介面組成。
l 組成 JDBC 的2個包:
l java.sql
l javax.sql
l 開發 JDBC 應用需要以上 2 個包的支援外,還需要匯入相應 JDBC 的資料庫實現 ( 即資料庫驅動 ) 。
第一個JDBC程式
l 編寫一個程式,這個程式從 user 表中讀取資料,並列印在命令列視窗中。
一、搭建實驗環境 :
1、在mysql中建立一個庫,並建立user表和插入表的資料。
2、新建一個Java工程,並匯入資料驅動。
二、編寫程式,在程式中載入資料庫驅動
DriverManager.registerDriver(Driver driver)
三、建立連線(Connection)
Connection conn = DriverManager.getConnection(url,user,pass);
四、建立用於向資料庫傳送SQL的Statement物件,併傳送sql
Statement st =conn.createStatement();
ResultSetrs =st.excuteQuery(sql);
五、從代表結果集的ResultSet中取出資料,列印到命令列視窗
六、斷開與資料庫的連線,並釋放相關資源
程式詳解—DriverManager
l Jdbc 程式中的 DriverManager 用於載入驅動,並建立與資料庫的連結,這個 API 的常用方法:
• DriverManager.registerDriver (new Driver())
• DriverManager.getConnection ( url , user, password) ,
•
l 注意:在實際開發中並不推薦採用 registerDriver 方法註冊驅動。原因有二:
一、檢視Driver的原始碼可以看到,如果採用此種方式,會導致驅動程式註冊兩次,也就是在記憶體中會有兩個Driver物件。
二、程式依賴mysql的api,脫離mysql的jar包,程式將無法編譯,將來程式切換底層資料庫將會非常麻煩。
• 推薦方式: Class.forName (“ com.mysql.jdbc.Driver ”);
• 採用此種方式不會導致驅動物件在記憶體中重複出現,並且採用此種方式,程式僅僅只需要一個字串,不需要依賴具體的驅動,使程式的靈活性更高。
•
l 同樣,在開發中也不建議採用具體的驅動型別指向 getConnection 方法返回的 connection 物件。
其實還有另一種註冊驅動的方式:System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");若要註冊多個驅動,在第二個引數後直接加驅動名字,用":"隔開
如:System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:oracle.jdbc.driver.OracleDriver");
資料庫URL
l URL 用於標識資料庫的位置,程式設計師通過 URL 地址告訴 JDBC 程式連線哪個資料庫, URL 的寫法為:
l 常用資料庫 URL 地址的寫法:
• Oracle 寫法: jdbc:oracle:thin :@localhost:1521:sid
• SqlServer — jdbc:microsoft:sqlserver ://localhost:1433; DatabaseName = sid
• MySql — jdbc:mysql ://localhost:3306/ sid
l Mysql 的 url 地址的簡寫形式: jdbc:mysql :/// sid
l 常用屬性: useUnicode = true&characterEncoding =UTF-8
程式詳解 —Connection
l Jdbc 程式中的 Connection ,它用於代表資料庫的連結, Collection 是資料庫程式設計中最重要的一個物件,客戶端與資料庫所有互動都是通過 connection 物件完成的,這個物件的常用方法:
• createStatement () :建立向資料庫傳送 sql 的 statement 物件。
• prepareStatement ( sql ) :建立向資料庫傳送預編譯 sql 的 PrepareSatement 物件。
• prepareCall ( sql ) :建立執行儲存過程的 callableStatement 物件。
• setAutoCommit ( boolean autoCommit ) :設定事務是否自動提交。
• commit() :在連結上提交事務。
• rollback() :在此連結上回滾事務。
程式詳解 —Statement
l Jdbc 程式中的 Statement 物件用於向資料庫傳送 SQL 語句, Statement 物件常用方法:
• executeQuery (String sql ) :用於向資料傳送查詢語句。
• executeUpdate (String sql ) :用於向資料庫傳送 insert 、 update 或 delete 語句
• execute(String sql ) :用於向資料庫傳送任意 sql 語句
• addBatch (String sql ) :把多條 sql 語句放到一個批處理中。
• executeBatch () :向資料庫傳送一批 sql 語句執行。
程式詳解 — ResultSet
l Jdbc 程式中的 ResultSet 用於代表 Sql 語句的執行結果。 Resultset 封裝執行結果時,採用的類似於表格的方式。 ResultSet 物件維護了一個指向表格資料行的 遊標, 初始的時候,遊標在第一行之前,呼叫 ResultSet.next () 方法,可以使遊標指向具體的資料行,進行呼叫方法獲取該行的資料。
l ResultSet 既然用於封裝執行結果的,所以該物件提供的都是用於獲取資料的 get 方法:
• 獲取任意型別的資料
• getObject ( int index)
• getObject (string columnName )
• 獲取指定型別的資料,例如:
• getString ( int index)
• getString (String columnName )
• 提問:資料庫中列的型別是 varchar ,獲取該列的資料呼叫什麼方法? Int 型別呢? bigInt 型別呢? Boolean 型別?
常用資料型別轉換表
程式詳解 — ResultSet
l ResultSet 還提供了對結果集進行滾動的方法:
• next() :移動到下一行
• Previous() :移動到前一行
• absolute( int row) :移動到指定行
• beforeFirst () :移動 resultSet 的最前面。
• afterLast () :移動到 resultSet 的最後面。
程式詳解 — 釋放資源
l Jdbc 程式執行完後,切記要釋放程式在執行過程中,建立的那些與資料庫進行互動的物件,這些物件通常是 ResultSet ,Statement 和 Connection 物件。
l 特別是 Connection 物件,它是非常稀有的資源,用完後必須馬上釋放,如果 Connection 不能及時、正確的關閉,極易導致系統當機。 Connection 的使用原則是儘量晚建立,儘量早的釋放。
l
l 為確保資源釋放程式碼能執行,資源釋放程式碼也一定要放在 finally 語句中。
使用 JDBC 對資料庫進行 CRUD
l Jdbc 中的 statement 物件用於向資料庫傳送 SQL 語句,想完成對資料庫的增刪改查,只需要通過這個物件向資料庫傳送增刪改查語句即可。
l
l Statement 物件的 executeUpdate 方法,用於向資料庫傳送增、刪、改的 sql 語句, executeUpdate 執行完後,將會返回一個整數 ( 即增刪改語句導致了資料庫幾行資料發生了變化 ) 。
l
l Statement.executeQuery 方法用於向資料庫傳送查詢語句, executeQuery 方法返回代表查詢結果的 ResultSet 物件。
PreparedStatement
l PreperedStatement 是 Statement 的孩子,它的例項物件可以通過呼叫 Connection.preparedStatement () 方法獲得,相對於 Statement 物件而言:
• PreperedStatement 可以避免 SQL 注入的問題。
• Statement 會使資料庫頻繁編譯 SQL ,可能造成資料庫緩衝區溢位。 PreparedStatement 可對 SQL 進行預編譯,從而提高資料庫的執行效率。
• 並且 PreperedStatement 對於 sql 中的引數,允許使用佔位符的形式進行替換,簡化 sql 語句的編寫。
資料庫分頁
l MySQL 分頁的實現:
• Select * from table limit M,N
• M :記錄開始索引位置
• N :取多少條記錄。
l 完成 WEB 頁面的分頁顯示
• 先獲得需分頁顯示的記錄總數,然後在 web 頁面中顯示頁碼。
• 根據頁碼,從資料庫中查詢相應的記錄顯示在 web 頁面中。
以上兩項操作通常使用 Page 物件進行封裝l Oracle 分頁語句:
select* from (
select rownum r_,row_.* from (
select * from studentorderby id
) row_ where rownum<=5
) where r_>=1
1位置:起始索引位置。
5位置:結束索引位置。
//本文及後續兩篇源自傳智播客