JDBC(Java Database Connectivity)是 Java 提供的一種 API,用于連接和操作數(shù)據(jù)庫(kù)。通過(guò) JDBC,Java 應(yīng)用程序可以與各種數(shù)據(jù)庫(kù)進(jìn)行交互,如 MySQL、Oracle、PostgreSQL 等。小編將詳細(xì)介紹使用 JDBC 訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟。
1. 導(dǎo)入 JDBC 驅(qū)動(dòng)
要通過(guò) JDBC 訪問(wèn)數(shù)據(jù)庫(kù),首先需要確保你的項(xiàng)目中包含了對(duì)應(yīng)數(shù)據(jù)庫(kù)的 JDBC 驅(qū)動(dòng)包。例如,如果使用 MySQL 數(shù)據(jù)庫(kù),你需要將 MySQL JDBC 驅(qū)動(dòng)(通常是 mysql-connector-java)添加到項(xiàng)目中。
對(duì)于 Maven 項(xiàng)目
你可以通過(guò) Maven 引入 MySQL JDBC 驅(qū)動(dòng)依賴:
xmlCopy Code<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
對(duì)于普通 Java 項(xiàng)目
你需要手動(dòng)下載 JDBC 驅(qū)動(dòng)并將其添加到項(xiàng)目的類路徑中。可以從官方網(wǎng)站下載對(duì)應(yīng)的 JDBC 驅(qū)動(dòng)(例如 MySQL 的驅(qū)動(dòng):https://dev.mysql.com/downloads/connector/j/)。
2. 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
在 Java 中使用 JDBC 連接數(shù)據(jù)庫(kù)之前,首先需要加載數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類。通常,JDBC 驅(qū)動(dòng)類是通過(guò)調(diào)用 Class.forName() 來(lái)加載的。通過(guò)這種方式,JDBC 驅(qū)動(dòng)類會(huì)注冊(cè)自己到 DriverManager 中,確保你能夠通過(guò) JDBC 進(jìn)行數(shù)據(jù)庫(kù)連接。
代碼示例:
javaCopy Codetry {
// 加載 MySQL 驅(qū)動(dòng)
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
對(duì)于一些現(xiàn)代的數(shù)據(jù)庫(kù)驅(qū)動(dòng)(如 MySQL 8 及以上版本),你可能不需要顯式加載驅(qū)動(dòng)類,因?yàn)樗鼈冎С?Java 的自動(dòng)加載機(jī)制。
3. 建立數(shù)據(jù)庫(kù)連接
通過(guò) DriverManager.getConnection() 方法可以與數(shù)據(jù)庫(kù)建立連接。你需要提供數(shù)據(jù)庫(kù)的 URL、用戶名和密碼,具體的 URL 格式取決于你使用的數(shù)據(jù)庫(kù)。
連接 URL 示例:
MySQL:jdbc:mysql://localhost:3306/your_database
PostgreSQL:jdbc:postgresql://localhost:5432/your_database
Oracle:jdbc:oracle:thin:@localhost:1521:your_database
代碼示例:
javaCopy Codeimport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "root";
String password = "password";
try {
// 獲取數(shù)據(jù)庫(kù)連接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("Connection successful!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4. 創(chuàng)建 Statement 或 PreparedStatement
一旦建立了與數(shù)據(jù)庫(kù)的連接,你就可以執(zhí)行 SQL 查詢。可以通過(guò) Connection 對(duì)象創(chuàng)建一個(gè) Statement 或 PreparedStatement 對(duì)象來(lái)執(zhí)行 SQL 語(yǔ)句。
Statement:適用于簡(jiǎn)單的 SQL 查詢。
PreparedStatement:適用于帶有參數(shù)的 SQL 查詢,它能夠避免 SQL 注入問(wèn)題,并提高性能。
代碼示例:使用 Statement 執(zhí)行查詢
javaCopy Codeimport java.sql.Statement;
try {
// 創(chuàng)建 Statement 對(duì)象
Statement stmt = connection.createStatement();
// 執(zhí)行 SQL 查詢
String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);
// 處理查詢結(jié)果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
代碼示例:使用 PreparedStatement 執(zhí)行查詢
javaCopy Codeimport java.sql.PreparedStatement;
try {
// 創(chuàng)建 PreparedStatement 對(duì)象
String sql = "SELECT * FROM users WHERE age > ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, 30); // 設(shè)置查詢參數(shù)
// 執(zhí)行查詢
ResultSet rs = pstmt.executeQuery();
// 處理查詢結(jié)果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
5. 處理結(jié)果集(ResultSet)
executeQuery() 方法返回一個(gè) ResultSet 對(duì)象,它代表查詢的結(jié)果。可以使用 ResultSet 的方法來(lái)遍歷和獲取數(shù)據(jù)。
常用方法:
next():將指針移動(dòng)到下一行,返回 true 如果有數(shù)據(jù)。
getInt(columnName):根據(jù)列名獲取 int 類型的數(shù)據(jù)。
getString(columnName):根據(jù)列名獲取 String 類型的數(shù)據(jù)。
6. 關(guān)閉連接
操作完數(shù)據(jù)庫(kù)后,務(wù)必關(guān)閉 ResultSet、Statement 和 Connection 對(duì)象,以避免資源泄露。
代碼示例:
javaCopy Codetry {
// 關(guān)閉 ResultSet 和 Statement
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
// 關(guān)閉 Connection
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
7. 完整的 JDBC 示例
javaCopy Codeimport java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "root";
String password = "password";
Connection connection = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 加載 MySQL 驅(qū)動(dòng)
Class.forName("com.mysql.cj.jdbc.Driver");
// 獲取數(shù)據(jù)庫(kù)連接
connection = DriverManager.getConnection(url, user, password);
// 創(chuàng)建 Statement 對(duì)象
stmt = connection.createStatement();
// 執(zhí)行 SQL 查詢
String sql = "SELECT * FROM users";
rs = stmt.executeQuery(sql);
// 處理查詢結(jié)果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
// 關(guān)閉資源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
使用 JDBC 訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟包括:
導(dǎo)入 JDBC 驅(qū)動(dòng)。
加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。
獲取數(shù)據(jù)庫(kù)連接。
創(chuàng)建 Statement 或 PreparedStatement。
執(zhí)行 SQL 查詢。
處理查詢結(jié)果。
關(guān)閉資源。
通過(guò)這些基本步驟,你可以在 Java 應(yīng)用程序中使用 JDBC 與數(shù)據(jù)庫(kù)進(jìn)行交互,實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查操作。