Java数据库访问主要涉及Java的JDBC(Java Database Connectivity)API,它定义了一个Java应用程序如何与数据库进行交互的标准。通过JDBC,Java程序可以连接到各种关系型数据库,执行SQL语句,并处理结果。以下是Java数据库访问的基本步骤:
1. 加载并注册JDBC驱动
首先,你需要加载并注册JDBC驱动。这通常通过调用Class.forName()方法实现,并传递驱动类的全名作为参数。
java复制代码
|
try { |
|
Class.forName("com.mysql.cj.jdbc.Driver"); // 以MySQL为例 |
|
} catch (ClassNotFoundException e) { |
|
e.printStackTrace(); |
|
} |
注意:自Java 6开始,通常不需要显式加载JDBC驱动,因为JDBC 4.0及更高版本支持服务提供者机制自动加载驱动。但是,有些数据库驱动可能仍然需要显式加载。
2. 建立数据库连接
使用DriverManager.getConnection()方法建立与数据库的连接。你需要提供数据库的URL、用户名和密码。
java复制代码
|
String url = "jdbc:mysql://localhost:3306/mydatabase"; // 以MySQL为例 |
|
String user = "username"; |
|
String password = "password"; |
|
Connection connection = null; |
|
try { |
|
connection = DriverManager.getConnection(url, user, password); |
|
} catch (SQLException e) { |
|
e.printStackTrace(); |
|
} |
3. 创建Statement或PreparedStatement对象
通过Connection对象创建Statement或PreparedStatement对象,用于执行SQL语句。PreparedStatement是Statement的子接口,它提供了编译SQL语句并存储的功能,可以重复使用,通常用于执行参数化的SQL语句,以提高性能和安全性。
java复制代码
|
Statement statement = null; |
|
try { |
|
statement = connection.createStatement(); |
|
// 或者使用PreparedStatement |
|
String sql = "SELECT * FROM users WHERE id = ?"; |
|
PreparedStatement preparedStatement = connection.prepareStatement(sql); |
|
preparedStatement.setInt(1, 123); // 设置参数 |
|
} catch (SQLException e) { |
|
e.printStackTrace(); |
|
} |
4. 执行SQL语句并处理结果
使用Statement或PreparedStatement对象执行SQL语句,并处理返回的结果。对于查询操作,通常使用ResultSet对象来遍历查询结果。
java复制代码
|
ResultSet resultSet = null; |
|
try { |
|
// 对于查询操作 |
|
resultSet = statement.executeQuery("SELECT * FROM users"); |
|
while (resultSet.next()) { |
|
int id = resultSet.getInt("id"); |
|
String name = resultSet.getString("name"); |
|
// 处理结果... |
|
} |
|
// 对于更新操作(如INSERT, UPDATE, DELETE) |
|
int rowsAffected = statement.executeUpdate("UPDATE users SET name='John' WHERE id=123"); |
|
} catch (SQLException e) { |
|
e.printStackTrace(); |
|
} finally { |
|
// 关闭资源 |
|
try { |
|
if (resultSet != null) resultSet.close(); |
|
if (statement != null) statement.close(); |
|
if (connection != null) connection.close(); |
|
} catch (SQLException e) { |
|
e.printStackTrace(); |
|
} |
|
} |
5. 关闭资源
最后,确保关闭所有打开的ResultSet、Statement和Connection对象,以释放数据库资源。这通常在一个finally块中完成。
使用try-with-resources语句(推荐)
从Java 7开始,你可以使用try-with-resources语句来自动管理资源,它会确保在try块执行完毕后自动关闭实现了AutoCloseable或Closeable接口的资源。
java复制代码
|
try (Connection connection = DriverManager.getConnection(url, user, password); |
|
Statement statement = connection.createStatement()) { |
|
// 执行SQL语句并处理结果... |
|
} catch (SQLException e) { |
|
e.printStackTrace(); |
|
} // 连接和语句在这里自动关闭 |
使用try-with-resources可以简化资源管理代码,减少出错的可能性。
请注意,上述代码示例假设你已经添加了相应数据库的JDBC驱动依赖到你的项目中。对于Maven项目,你可以在pom.xml文件中添加相应的依赖。
此外,为了生产环境的稳定性和安全性,通常建议使用连接池(如HikariCP、c3p0、DBCP等)来管理数据库连接,而不是每次需要时都创建新的连接。连接池可以复用连接,提高性能,并管理连接的创建、使用和销毁。