java如何查询数据库
查询数据库的基本步骤
在Java中查询数据库通常使用JDBC(Java Database Connectivity)API。以下是基本步骤:
-
加载数据库驱动
需要加载对应的数据库驱动类,例如MySQL的驱动类:Class.forName("com.mysql.cj.jdbc.Driver"); -
建立数据库连接
使用DriverManager.getConnection()方法建立连接,需提供URL、用户名和密码:String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; Connection connection = DriverManager.getConnection(url, username, password); -
创建Statement对象
通过Connection对象创建Statement或PreparedStatement:Statement statement = connection.createStatement(); // 或使用预编译的PreparedStatement(推荐) PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE id = ?"); -
执行SQL查询
使用executeQuery()执行查询并获取结果集:ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); // 或为PreparedStatement设置参数 preparedStatement.setInt(1, 123); ResultSet resultSet = preparedStatement.executeQuery(); -
处理结果集
遍历ResultSet获取查询结果:while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } -
关闭资源
按顺序关闭ResultSet、Statement和Connection:
resultSet.close(); statement.close(); connection.close();
使用PreparedStatement防止SQL注入
PreparedStatement通过参数化查询避免SQL注入,推荐始终使用:
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, inputUsername);
ps.setString(2, inputPassword);
ResultSet rs = ps.executeQuery();
使用连接池优化性能
频繁创建和关闭连接会降低性能,推荐使用连接池(如HikariCP):
-
添加依赖(Maven):
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> -
配置并使用连接池:

HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); config.setUsername("root"); config.setPassword("password"); HikariDataSource dataSource = new HikariDataSource(config); try (Connection connection = dataSource.getConnection()) { // 执行查询操作 }
使用ORM框架简化操作
主流ORM框架(如Hibernate、MyBatis)可减少手动编写JDBC代码:
-
MyBatis示例:
// 定义Mapper接口 public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(int id); } // 通过SqlSession调用 SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.getUserById(123); -
Hibernate示例:
Session session = sessionFactory.openSession(); User user = session.get(User.class, 123);
异常处理
JDBC操作需处理SQLException,推荐使用try-with-resources自动关闭资源:
try (Connection conn = DriverManager.getConnection(url, user, pass);
PreparedStatement ps = conn.prepareStatement(sql)) {
// 执行查询
} catch (SQLException e) {
e.printStackTrace();
}
事务管理
通过Connection对象控制事务:
connection.setAutoCommit(false); // 关闭自动提交
try {
// 执行多个SQL操作
connection.commit(); // 提交事务
} catch (SQLException e) {
connection.rollback(); // 回滚事务
}






