13、Java JDBC 编程:连接数据库的桥梁
嘿,Java 开发者们!在这篇博客中,我们将一起探索 Java 数据库连接(JDBC)编程。JDBC 是 Java 程序与各种数据库系统进行交互的标准 API,它就像一座桥梁,让我们能够使用 Java 语言来操作数据库,如存储、查询、更新和删除数据等。无论你是在开发一个小型的桌面应用程序,还是一个大型的企业级应用,掌握 JDBC 编程都是非常重要的。让我们一起踏上 JDBC 编程之旅,解锁数据库操作的强大功能吧!
一、JDBC 概述
1. 什么是 JDBC?
JDBC(Java Database Connectivity)是 Java 提供的一组 API,允许 Java 程序连接到不同的数据库系统,如 MySQL、Oracle、PostgreSQL 等。它定义了一套标准的接口,不同的数据库厂商提供实现这些接口的驱动程序,使得我们可以用统一的方式编写数据库操作代码,而不必关心具体使用的是哪个数据库。
2. JDBC 的基本组件
- DriverManager:用于管理一组 JDBC 驱动程序,负责建立与数据库的连接。
- Connection:代表与数据库的连接。
- Statement:用于执行静态 SQL 语句。
- PreparedStatement:用于执行预编译的 SQL 语句,提供了更好的性能和安全性。
- ResultSet:存储 SQL 查询的结果集。
二、准备工作:添加数据库驱动
在使用 JDBC 之前,需要添加相应数据库的 JDBC 驱动。对于 Maven 项目,可以在 pom.xml
中添加依赖,例如对于 MySQL:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
三、建立数据库连接
1. 加载驱动程序
使用 Class.forName()
方法加载数据库驱动。对于 MySQL 8.0 及以上:
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
2. 建立连接
使用 DriverManager.getConnection()
方法建立与数据库的连接。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcConnectionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password)) {
System.out.println("连接成功!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四、执行 SQL 语句
1. 使用 Statement
使用 Statement
执行简单的 SQL 语句。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcStatementExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement()) {
// 创建表
String createTableSql = "CREATE TABLE IF NOT EXISTS students (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), age INT)";
statement.executeUpdate(createTableSql);
// 插入数据
String insertSql = "INSERT INTO students (name, age) VALUES ('Alice', 25)";
statement.executeUpdate(insertSql);
// 更新数据
String updateSql = "UPDATE students SET age = 26 WHERE name = 'Alice'";
statement.executeUpdate(updateSql);
// 删除数据
String deleteSql = "DELETE FROM students WHERE name = 'Alice'";
statement.executeUpdate(deleteSql);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. 使用 PreparedStatement
使用 PreparedStatement
执行预编译的 SQL 语句,避免 SQL 注入。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcPreparedStatementExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO students (name, age) VALUES (?,?)")) {
preparedStatement.setString(1, "Bob");
preparedStatement.setInt(2, 30);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
五、处理结果集(ResultSet)
使用 ResultSet
存储查询结果,并对其进行处理。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcResultSetExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement()) {
String querySql = "SELECT * FROM students";
ResultSet resultSet = statement.executeQuery(querySql);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
六、事务管理
使用 JDBC 可以进行事务管理,确保一系列操作的原子性。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcTransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement()) {
connection.setAutoCommit(false);
try {
statement.executeUpdate("INSERT INTO students (name, age) VALUES ('Charlie', 35)");
statement.executeUpdate("UPDATE students SET age = 36 WHERE name = 'Charlie'");
connection.commit();
System.out.println("事务提交成功!");
} catch (SQLException e) {
connection.rollback();
System.out.println("事务回滚!");
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
七、总结与实践
JDBC 编程是 Java 开发中连接数据库的关键技术,通过它我们可以方便地操作各种数据库。我们可以使用 Statement
或 PreparedStatement
执行 SQL 语句,使用 ResultSet
处理查询结果,还可以进行事务管理。
现在你可以尝试使用 JDBC 开发一个简单的数据库应用程序,例如学生信息管理系统,实现学生信息的增删改查功能。在实践中,你会更加深入地理解 JDBC 的强大功能和使用技巧。如果你在使用 JDBC 过程中遇到任何问题,欢迎在评论区留言,让我们一起探索如何更好地利用 JDBC 实现数据库操作,让我们的 Java 程序和数据库无缝对接。