JDBC(Java Database Connectivity)是Java連接資料庫的標準API,它提供了一個通用的介面,使得Java程序可以和任何資料庫連接,並執行諸如查詢、插入和更新等操作。JDBC是Java訪問資料庫的門票,也是Java應用程序中不可或缺的一部分。
一、快速入門
下面是在Java程序中使用JDBC的一個簡單示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCDemo { public static void main(String[] args) throws SQLException { // 1. 載入 JDBC 驅動程序 Class.forName("com.mysql.jdbc.Driver"); // 2. 創建資料庫連接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); // 3. 創建 Statement 對象 Statement stmt = conn.createStatement(); // 4. 執行 SQL 查詢 ResultSet rs = stmt.executeQuery("SELECT * FROM users"); // 5. 處理結果集 while (rs.next()) { System.out.println(rs.getString("name")); } // 6. 釋放資源 rs.close(); stmt.close(); conn.close(); } }
上面的代碼用JDBC連接到本地MySQL資料庫,查詢了一個users表的所有記錄,並將每條記錄的名字(name)列印到控制台。這段代碼展示了JDBC連接資料庫並執行SQL查詢的基本步驟:
1. 載入JDBC驅動程序。
2. 創建資料庫連接。
3. 創建Statement對象。
4. 執行SQL查詢。
5. 處理結果集。
6. 釋放資源。
二、獲得連接
在JDBC中,使用Connection
介面來表示資料庫連接。連接到資料庫需要用到以下三個參數:
url
:表示資料庫的URL,形如jdbc:database://host:port/database_name
username
:表示資料庫登錄的用戶名。password
:表示資料庫登錄的密碼。
連接資料庫的一種常見方式是使用DriverManager
類,具體示例如下:
Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); }
三、執行SQL語句
執行SQL語句需要用到Statement
或PreparedStatement
對象。
Statement
可以執行任何類型的SQL語句,但是可能存在SQL注入的問題。代碼示例如下:
Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * FROM users WHERE id = " + id); while (rs.next()) { System.out.println(rs.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } }
PreparedStatement
支持預編譯的SQL語句,避免了SQL注入問題。代碼示例如下:
PreparedStatement stmt = null; ResultSet rs = null; try { stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); stmt.setInt(1, id); rs = stmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } }
四、事務處理
JDBC支持事務處理,可以使用Connection
介面的commit
、rollback
和setAutoCommit
方法完成事務處理。
代碼示例如下:
conn.setAutoCommit(false); // 關閉自動提交 try { // 執行多條SQL語句 stmt1.execute(); stmt2.execute(); // 提交事務 conn.commit(); } catch (Exception e) { // 回滾事務 conn.rollback(); } finally { conn.setAutoCommit(true); // 恢復自動提交 }
五、連接池
使用JDBC連接資料庫時,每次都需要創建連接對象、執行SQL語句和釋放資源,這樣會消耗大量的時間和資源,而且對於高並發的應用來說,可能會導致連接過多,從而導致資料庫的性能下降。
連接池技術的出現就是為了解決這些問題。連接池會維護一些預先創建好的連接,並在需要時分配這些連接。通過連接池可以有效地避免連接過多和頻繁創建連接對象的開銷,提升應用性能。
常見的Java連接池有C3P0、Druid和HikariCP等。
以HikariCP舉例,代碼示例如下:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; public class ConnectionPoolDemo { private static HikariConfig config = new HikariConfig(); private static HikariDataSource ds; static { config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("username"); config.setPassword("password"); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); ds = new HikariDataSource(config); } public static Connection getConnection() throws SQLException { return ds.getConnection(); } }
六、總結
JDBC是Java訪問資料庫的重要手段,也是Java應用程序中不可或缺的一部分。本文主要介紹了如何連接資料庫、執行SQL語句、進行事務處理和使用連接池。在實際應用中,根據業務需求選擇合適的方法和工具來優化資料庫訪問,提升應用性能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243492.html