目录
1.JDBC的概述
1.1 Java数据库连接(Java Database Connectivity,JDBC)是Java语言中用于执行SQL语句的API。它允许Java程序与各种关系型数据库进行通信和交互,包括MySQL、Oracle、SQL Server等。JDBC提供了一种标准的方式来连接数据库、发送查询和更新语句、以及获取查询结果。通过JDBC,开发人员可以编写能够跨多种数据库平台运行的可移植性强的数据库应用程序。
1.2 JDBC与数据库驱动的关系:接口与实现的关系。
1.3 JDBC规范(掌握四个核心对象):
DriverManager:用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 操作数据库sql语句的对象
ResultSet: 结果集或一张虚拟表
2.JDBC的使用
2.1 加载驱动程序
使用Class.forName()
加载JDBC驱动程序。
2.2 建立连接
使用DriverManager.getConnection()
与数据库建立连接。
2.3 创建Statement对象
使用conn.createStatement()
创建Statement
对象,用于执行SQL查询。
2.4 执行SQL查询
使用stmt.executeQuery()
执行查询并获取结果集。
2.5 处理结果集
通过循环遍历ResultSet
并提取数据
2.6 关闭资源
关闭ResultSet
、Statement
和Connection
,确保资源被正确释放。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCExample {
// JDBC驱动程序的类名
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
// 数据库URL
private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC";
// 数据库用户名和密码
private static final String USER = "your_username";
private static final String PASS = "your_password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 1. 加载JDBC驱动程序
Class.forName(JDBC_DRIVER);
// 2. 建立连接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 3. 创建Statement对象
System.out.println("Creating statement...");
stmt = conn.createStatement();
// 4. 执行SQL查询
String sql = "SELECT id, name, age FROM Users";
ResultSet rs = stmt.executeQuery(sql);
// 5. 处理结果集
while (rs.next()) {
// 检索数据
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
// 显示数据
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.println(", Age: " + age);
}
// 6. 关闭结果集
rs.close();
} catch (SQLException se) {
// 处理SQL错误
se.printStackTrace();
} catch (Exception e) {
// 处理其他错误
e.printStackTrace();
} finally {
// 7. 关闭Statement和Connection
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException se2) {
// 忽略
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
这个示例展示了最基本的JDBC操作。根据具体的需求,可能需要添加额外的步骤,例如处理事务、执行更新语句、使用PreparedStatement
以防止SQL注入等。
3.注意事项
3.1异常处理:JDBC操作涉及到与数据库的交互,可能会发生各种异常,如SQL异常、连接异常等。确保在代码中进行适当的异常处理,以避免程序崩溃或安全漏洞。
3.2连接管理:数据库连接是有限资源,需要在使用完毕后及时关闭以释放资源。尤其是在使用连接池时,更要注意及时释放连接,避免资源泄露和性能问题。
3.3SQL注入:为了防止SQL注入攻击,尽量使用PreparedStatement
代替Statement
执行动态SQL语句,并使用参数化查询来处理用户输入的数据。
3.4事务管理:对于涉及多个数据库操作的业务,需要考虑事务管理。通过Connection.setAutoCommit(false)
关闭自动提交模式,然后使用Connection.commit()
和Connection.rollback()
手动管理事务。
3.5线程安全性:Connection
和Statement
不是线程安全的对象,应该在单个线程内使用,并在使用完毕后及时关闭。
3.6性能优化:避免在循环中频繁创建和关闭连接,可以使用连接池来提高性能。另外,尽量减少网络传输的数据量,优化SQL查询语句,使用索引等方式来提高查询效率。
3.7数据库驱动版本:确保使用的数据库驱动程序版本与数据库服务器版本兼容,并且与Java版本兼容。
3.8关闭资源:不要忘记在finally块中关闭所有打开的资源,以确保在发生异常时资源能够被正确释放。