Java數據庫操作


一、JDBC

1.JDBC

           Java數據庫連接,用於Java程序中實現數據庫操作功能,java.sql包中提供了執行SQL語句,訪問各種數據庫的方法,並為各種不同的數據庫提供統一的操作接口及類。

2.操作步驟

  1. 加載JDBC驅動器,將JDBC驅動加載到classpath中。
  2. 加載JDBC驅動,並將其注冊到DriverManager中。一般使用反射機制class.forName(String driverName)
  3. 建立數據庫連接,取得Connection對象。一般通過DriverManager.getConnection(url,username,passwd)方法實現,其中url表示連接數據庫的字符串,uaername表示連接數據庫的用戶名,passwd表示連接數據庫的密碼。
  4. 建立Statement對象或PrepareStatement對象。
  5. 執行SQL語句。
  6. 訪問結構集ResultSet對象。
  7. 依次訪問ResultSet、Statement、PreparedStatement、Connection對象關閉,釋放掉所占用的資源。

3.舉例舉出一個用訪問MySQL的例子

二、JDBC處理事務采用的方法

1.事務:用戶定義的一個數據庫操作序列,這些操作要么全做,要么全部不做,是一個不可分割的工作單元。

2.事務的特性:

  • 原子性——由數據庫的恢復機制控制
  • 隔離性——由數據庫的兵法控制機制控制
  • 一致性——由原子性、隔離性、持久性一起控制
  • 持久性——由數據庫恢復機制控制

3.事務的方法

  • 事務開始begin trans
  • 事務提交 commits,默認自動提交,但可以通過setAutoCommit(false)方法來禁止自動提交
  • 事務回滾 rollback
  • 事務結束 end trans

4.JDBC有哪些事務的隔離級別?

            為了解決與“多個線程請求相同數據”相關的問題,事務之間通常會用鎖相互隔離開。

  1. TEANSACTION_NONE JDB  不支持事務
  2. TRANSCTION_READ_UNCOMMITTED 未提交讀——說明提交前一個事務可以看到另一個事務的變化。這樣讀“臟”數據、不可重復讀和虛度都是允許的
  3. TRANSCTION_READ_COMMITTED 已提交讀——說明讀取為題教的數據是不允許的,這個級別仍然允許不可重復讀和虛讀
  4. TRANSCTION_READ_COMMITTED 可重讀讀——說明事務保證能再次讀取相同的數據而不會失敗,但是虛讀仍然會出現
  5. TRANSCTION_SERIALIZABLE 可序列化——能防止讀“臟”數據、不可重復讀、虛讀

備注:

  • 讀“臟”數據:一個事務讀到另一個事務尚未提交的數據,則另一個事務更新時,一個事務讀取的數據就是“臟”數據。
  • 不可重復讀:一個事務的操作導致另一事務前后兩次讀到不同的數據。
  • 虛讀:一個事務的操作導致另一個事務前后兩次查詢的結果數據量不同。

三、Class,forName的作用

          把類加載到JVM中,它會返回一個與帶有給定字符串名的類或接口相關聯的Class對象,並且JVM會加載這個類,同時JVM會執行該類的靜態代碼段

四、Statement、PreparedStatement和CallableStatement的區別

  • Statement用來執行不帶參數的簡單的SQL語句,並返回它鎖生成結果的對象,每次執行SQL語句時,數據庫都要編譯改SQL語句
  • PreparedStatement表示預編譯的SQL語句的對象,用於執行帶參數的預編譯SQL語句
  • CallableStatement則提供了用來調用數據中存儲過程的接口,如果有輸出參數要注冊,說明是輸出參數。

Statement、PreparedStatement雖然能夠完成相同的功能,但是PreparedStatement具有以下優點

  • 效率更高。每當執行一個PreparedStatement對象時,由於在緩沖區中可以發現預編譯命令,雖然它會再被解析一次,但不會再被編譯,是可以重復使用的,從而能夠提高系統性能。
  • 代碼可讀性和可維護性好
  • 安全性更好,能夠預防SQL注入,SQL注入指的是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器,達到執行惡意SQL語句的目的。

五、getString()方法與getObject()方法有什么區別?

        JDBC提供了getString()、getInt()和getData()等方法從ResultSet中獲取數據,當查詢結果集中的數據量較小時,不用考慮性能,但是當查詢結果集中的數據量非常大的時候,會拋出異常,通常情況下,使用getObject()方法可以解決這個問題。

        getString()或getInt()等方法在調用時,程序會一次性地把數據都放在內存中,然后通過調用ResultSet的next()和getString()等方法來獲取數據。當數據大到內存中放不下的時候就會拋出異常。而使用getObject()方法就不會有這種問題,因為數據不會一次性地被讀到內存中,每次調用時會直接從數據庫中獲取數據,因此使用這種方法不會因為數據過而出錯。

六、使用JDBC要注意哪些問題?

編程時,一定要保證釋放不再使用的連接

七、什么是JDO

Java數據對象是一個用於存取某種數據倉庫中的對象的標准化API,它會使開發人員能夠間接訪問數據庫。

八、JDBC與Hibernate有什么區別?

Hibernate是JDBC的封裝,采用配准文件的形式將數據庫的連接參數寫到XML文件中,至於對數據庫的訪問仍然使用JDBC來完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM