jdbc詳解(一)

weixin_34054866發表於2013-08-26

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);

四、建立用於向資料庫傳送SQLStatement物件,併傳送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物件。

二、程式依賴mysqlapi,脫離mysqljar包,程式將無法編譯,將來程式切換底層資料庫將會非常麻煩。

推薦方式: 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位置:結束索引位置。

//本文及後續兩篇源自傳智播客

相關文章