JDBC接口

JDBC(Java Database Connectivity)是 Java 編程語言中用于連接和執(zhí)行數(shù)據(jù)庫操作的一套 API。JDBC 提供了一種基于標準的方法來建立數(shù)據(jù)庫連接、執(zhí)行 SQL 語句、處理結(jié)果集等。以下是 JDBC 的一些主要接口:

1. DriverManager

用途: DriverManager 類是 JDBC 的管理層,用于管理 JDBC 驅(qū)動程序的加載和建立數(shù)據(jù)庫連接。
關(guān)鍵方法:

  • getConnection(String url, String user, String password): 連接到數(shù)據(jù)庫。

2. Connection

用途: Connection 接口代表數(shù)據(jù)庫連接。它用于執(zhí)行 SQL 語句和管理事務(wù)。
關(guān)鍵方法:

  • createStatement(), prepareStatement(String sql), prepareCall(String sql): 創(chuàng)建用于執(zhí)行 SQL 的 Statement、PreparedStatement 和 CallableStatement 對象。
  • setAutoCommit(boolean autoCommit), commit(), rollback(): 管理事務(wù)。
  • close(): 關(guān)閉連接。

3. Statement

用途: Statement 接口用于執(zhí)行靜態(tài) SQL 語句并返回它所生成的結(jié)果。
關(guān)鍵方法:

  • executeQuery(String sql): 執(zhí)行返回單個 ResultSet 對象的 SQL 語句(如 SELECT)。
  • executeUpdate(String sql): 執(zhí)行 SQL DML(數(shù)據(jù)操作語言)語句,如 INSERT、UPDATE 或 DELETE。
    close(): 關(guān)閉 Statement 對象。

4. PreparedStatement

用途: PreparedStatement 接口擴展了 Statement 接口,允許使用預(yù)編譯的 SQL 語句。這提高了性能并提供了一種防止 SQL 注入的方法。
關(guān)鍵方法:

  • setInt(int parameterIndex, int value), setString(int parameterIndex, String value), 等: 設(shè)置參數(shù)值。
  • executeQuery(), executeUpdate(): 執(zhí)行 SQL 語句。

5. CallableStatement

用途: CallableStatement 接口用于執(zhí)行數(shù)據(jù)庫存儲過程。
關(guān)鍵方法:

  • registerOutParameter(int parameterIndex, int sqlType): 注冊輸出參數(shù)。
  • setInt(int parameterIndex, int value), setString(int parameterIndex, String value), 等: 設(shè)置輸入?yún)?shù)。
  • execute(): 執(zhí)行存儲過程。

6. ResultSet

用途: ResultSet 接口表示數(shù)據(jù)庫查詢結(jié)果。它用于讀取和遍歷數(shù)據(jù)。
關(guān)鍵方法:

  • next(): 移動到結(jié)果集的下一行。
  • getInt(String columnLabel), getString(String columnLabel), 等: 獲取當前行的列值。
  • close(): 關(guān)閉結(jié)果集。

7. DataSource

用途: DataSource 接口是一個替代 DriverManager 的方式,用于建立數(shù)據(jù)庫連接。它通常與連接池一起使用。
關(guān)鍵方法:

  • getConnection(): 獲取數(shù)據(jù)庫連接。

這些接口組成了 JDBC 的核心,通過它們可以實現(xiàn) Java 應(yīng)用程序與多種數(shù)據(jù)庫之間的交互。使用 JDBC,開發(fā)者可以編寫?yīng)毩⒂诘讓訑?shù)據(jù)庫的代碼,從而提高應(yīng)用程序的可移植性。

執(zhí)行一個事務(wù)的流程

DataSource ds = // 獲取 DataSource
Connection conn = null;
PreparedStatement pstmt = null;

try {
    conn = ds.getConnection();
    conn.setAutoCommit(false);

    String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
    pstmt = conn.prepareStatement(sql);

    // 設(shè)置參數(shù)
    pstmt.setString(1, "value1");
    pstmt.setInt(2, 123);

    // 執(zhí)行更新
    pstmt.executeUpdate();

    // 可以添加更多的 SQL 操作

    conn.commit(); // 提交事務(wù)
} catch (SQLException e) {
    if (conn != null) {
        try {
            conn.rollback(); // 回滾事務(wù)
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
    e.printStackTrace();
} finally {
    // 關(guān)閉資源
    if (pstmt != null) pstmt.close();
    if (conn != null) conn.close();
}

DataSource通常是我們使用的連接池,比如Springboot默認使用的HikariCP連接池:

HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/yourdb");
ds.setUsername("username");
ds.setPassword("password");
// 其他配置...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容