“最開始覺得都是真的,慢慢覺得都是假的,然後再開始發現有真有假,最後無所謂真假。”
——嚮往的生活
1.什麼是JDBC?
JDBC是(Java Data Base Connectivity)即java數據庫連接。
JDBC是一種執行SQL語句的java API,是java訪問數據庫的橋樑,它可以爲多種關係型數據庫提供統一的訪問接口。
2.既然說JDBC是API,那它的常用接口有哪些呢?
JDBC常用API主要位於Java.sql包中,該包定義了一系列訪問數據庫的接口和類。所以JDBC是不需要額外導入單獨的jar包的,它包含再java API裏,但是具體的數據庫驅動是需要導的,因爲不同的數據庫廠家,用的不同的jar包,加載的驅動也不一樣。
(1)Driver接口
driver接口是所有jdbc驅動程序必須實現的接口,該接口專門提供給數據庫廠商使用。即導入的數據庫jar包中的驅動類是實現了Driver的(比如說oracle的驅動類:oracle.jdbc.driver.OracleDriver)。
(2)DriverManager類
DriverManger類用於加載jdbc驅動並且創建與數據庫的連接。
(3)Connection接口
(4)Statement接口
(5)PreparedStatement接口
(6)ResultSet接口
3.JDBC連接數據庫的步驟?
(1).加載數據庫驅動
(2).連接數據庫
(3).建立數據庫連接
(4).準備sql語句
(5).填充sql語句
(6).分析結果集
(7).釋放資源
4.釋放資源的順序?
先關閉ResultSet,然後是Statement,最後是Connetion,剛好與創建相應對象時的順序相反。
5.超出打開遊標最大數ORA-01000?
Java代碼在執行conn.createStatement()和conn.prepareStatement()的時候,實際上都是相當與在數據庫中打開了一個cursor。尤其是,如果你的createStatement和prepareStatement是在一個循環裏面的話,就會非常容易出現這個問題。因爲遊標一直在不停的打開,而且沒有關閉。
6.注意事項?
PreparedStatement批量執行方式佔用內存有可能非常大(跟批量數據量有關係),如果只是使用close,包括connection的close,並不能及時釋放,哪怕是強制gc也不能釋放。
使用addBatch()緩存數據時要在循環中設置條件,當循環達到指定次數後執行executeBatch(),將緩存中的sql全部發給數據庫,然後執行clearBatch()清楚緩存,否則數據過大是會出現OutOfMemory(內存不足)。
7.批處理?
executeQuery()是專門用來查詢語句SELECT語句的;
而addBatch()和executeUpdate()是用來執行數據插入或更新的,不同就是一個批量,一個單個插入。這兩個不要一起使用,那樣addBatch()就和沒寫一樣。
addBatch()是用來緩存數據的,將多條sql語句緩存起來,再通過executeBatch()方法一次性發給數據庫,大大提高執行效率。executeUpdate()注重的及時性,每寫一條sql語句就發送給數據庫保存起來,沒有緩存,這樣頻繁操作數據庫效率非常低。
喝了個下午茶,現在纔回,明天要上班,哎,有點亂,暫存,下次修改。