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_nameusername:表示資料庫登錄的用戶名。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
微信掃一掃
支付寶掃一掃