JDBC 操作數據庫 超出打開遊標最大數ORA-01000

“最開始覺得都是真的,慢慢覺得都是假的,然後再開始發現有真有假,最後無所謂真假。”

                                                                                                                                                                               ——嚮往的生活

 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語句就發送給數據庫保存起來,沒有緩存,這樣頻繁操作數據庫效率非常低。

喝了個下午茶,現在纔回,明天要上班,哎,有點亂,暫存,下次修改。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章