JDBC操作數據庫的基本步驟:


JDBC操作數據庫的基本步驟:

    1)加載(注冊)數據庫驅動(到JVM)。

    2)建立(獲取)數據庫連接。

    3)創建(獲取)數據庫操作對象。

    4)定義操作的SQL語句。

    5)執行數據庫操作。

    6)獲取並操作結果集。

   7)關閉對象,回收數據庫資源(關閉結果集-->關閉數據庫操作對象-->關閉連接)。

package com.yangshengjie.jdbc;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class JDBCTest {  
    /** 
     * 使用JDBC連接並操作mysql數據庫 
     */  
    public static void main(String[] args) {  
        // 數據庫驅動類名的字符串  
        String driver = "com.mysql.jdbc.Driver";  
        // 數據庫連接串  
        String url = "jdbc:mysql://127.0.0.1:3306/jdbctest";  
        // 用戶名  
        String username = "root";  
        // 密碼  
        String password = "mysqladmin";  
        Connection conn = null;  
        Statement stmt = null;  
        ResultSet rs = null;  
        try {  
            // 1、加載數據庫驅動( 成功加載后,會將Driver類的實例注冊到DriverManager類中)  
            Class.forName(driver );  
            // 2、獲取數據庫連接  
            conn = DriverManager.getConnection(url, username, password);  
            // 3、獲取數據庫操作對象  
            stmt = conn.createStatement();  
            // 4、定義操作的SQL語句  
            String sql = "select * from user where id = 100";  
            // 5、執行數據庫操作  
            rs = stmt.executeQuery(sql);  
            // 6、獲取並操作結果集  
            while (rs.next()) {  
                System.out.println(rs.getInt("id"));  
                System.out.println(rs.getString("name"));  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 7、關閉對象,回收數據庫資源  
            if (rs != null) { //關閉結果集對象  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (stmt != null) { // 關閉數據庫操作對象  
                try {  
                    stmt.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (conn != null) { // 關閉數據庫連接對象  
                try {  
                    if (!conn.isClosed()) {  
                        conn.close();  
                    }  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
} 

 提示:關閉外部資源的順序應該和打開的順序相反,也就是說先關閉ResultSet、再關閉Statement、在關閉Connection。上面的代碼只關閉了Connection(連接),雖然通常情況下在關閉連接時,連接上創建的語句和打開的游標也會關閉,但不能保證總是如此,因此應該按照剛才說的順序分別關閉。此外,第一步加載驅動在JDBC 4.0中是可以省略的(自動從類路徑中加載驅動),但是我們建議保留。

常見面試題:

1.Statement和PreparedStatement有什么區別?哪個性能更好?
答:與Statement相比,①PreparedStatement接口代表預編譯的語句,它主要的優勢在於可以減少SQL的編譯錯誤並增加SQL的安全性(減少SQL注射攻擊的可能性);②PreparedStatement中的SQL語句是可以帶參數的,避免了用字符串連接拼接SQL語句的麻煩和不安全;③當批量處理SQL或頻繁執行相同的查詢時,PreparedStatement有明顯的性能上的優勢,由於數據庫可以將編譯優化后的SQL語句緩存起來,下次執行相同結構的語句時就會很快(不用再次編譯和生成執行計划)。

為了提供對存儲過程的調用,JDBC API中還提供了CallableStatement接口。存儲過程(Stored Procedure)是數據庫中一組為了完成特定功能的SQL語句的集合,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。雖然調用存儲過程會在網絡開銷、安全性、性能上獲得很多好處,但是存在如果底層數據庫發生遷移時就會有很多麻煩,因為每種數據庫的存儲過程在書寫上存在不少的差別。

 

2.使用JDBC操作數據庫時,如何提升讀取數據的性能?如何提升更新數據的性能?
答:要提升讀取數據的性能,可以指定通過結果集(ResultSet)對象的setFetchSize()方法指定每次抓取的記錄數(典型的空間換時間策略);要提升更新數據的性能可以使用PreparedStatement語句構建批處理,將若干SQL語句置於一個批處理中執行。

 


免責聲明!

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



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