在 Java 中连接数据库是一项常见的任务,通常通过使用 JDBC(Java Database Connectivity)API 来完成。JDBC 提供了一组用于与数据库进行交互的类和接口。以下是详细的步骤和示例,展示如何在 Java 中连接到数据库。
1. 添加 JDBC 驱动
在开始之前,你需要确保你的项目中包含了适当的 JDBC 驱动程序。对于大多数数据库,你可以从数据库的官方网站下载 JDBC 驱动,或者通过构建工具(如 Maven 或 Gradle)添加依赖。
例如,对于 MySQL 数据库,你可以在 Maven 的 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
2. 加载 JDBC 驱动
在 Java 代码中,你需要加载 JDBC 驱动。这可以通过 Class.forName
方法实现。不过,从 JDBC 4.0 开始,如果你使用的是 Java 6 或更高版本,并且 JDBC 驱动在类路径中,那么驱动会自动被加载,这一步可以省略。
// 对于旧版本的 JDBC,可能需要手动加载驱动
// Class.forName("com.mysql.cj.jdbc.Driver");
3. 建立数据库连接
使用 DriverManager.getConnection
方法建立与数据库的连接。你需要提供数据库 URL、用户名和密码。
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
System.out.println("Connected to the database!");
} catch (SQLException e) {
e.printStackTrace();
}
4. 执行 SQL 查询
一旦建立了连接,你可以使用 Statement
或 PreparedStatement
来执行 SQL 查询。
使用 Statement
try {
Statement statement = connection.createStatement();
String sql = "SELECT * FROM your_table";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
// 获取数据
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 处理数据
}
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
使用 PreparedStatement
PreparedStatement
提供了更好的性能和安全性(防止 SQL的 注入)。
try {
String sql = "SELECT * FROM your_table WHERE id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 1); // 设置参数
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
// 获取数据
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 处理数据
}
resultSet.close();
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
5. 更新数据库
可以使用 executeUpdate
方法来执行插入、更新和删除操作。
try {
String sql = "INSERT INTO your_table (name, age) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "John");
preparedStatement.setInt(2, 30);
int rowsAffected = preparedStatement.executeUpdate();
System.out.println("Rows affected: " + rowsAffected);
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
6. 关闭连接
最后,不要忘记关闭连接和相关资源。通常,这应该在 finally
块中完成,以确保资源总是被释放。
try {
// 你的数据库操作代码
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
完整示例
以下是一个完整的示例,展示了如何连接到 MySQL 数据库并执行一个简单的查询。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseConnectionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
System.out.println("Connected to the database!");
String sql = "SELECT * FROM your_table WHERE id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 1);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
resultSet.close();
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();