使用JDBC查找表记录
这个其实和02课差不多,就是把数据读取出来,执行的是 executeQuery 方法。下面使用 PreparedStatement 对象来查询数据库。
完整代码
import java.sql.*;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");//注册JDBC驱动
String url = "jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true";
Connection conn = DriverManager.getConnection(url,"root","123321");
PreparedStatement statement = conn.prepareStatement("select id, name from user where name = ?");
statement.setString(1, "王五");
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
}
if(statement != null) {
statement.close();
}
if(conn != null) {
conn.close();
}
}
}Code language: JavaScript (javascript)
补充说明
- 查询操作使用 executeQuery() 方法,返回 ResultSet 对象,而不是 int
- ResultSet 通过 next() 方法移动游标,初始位置在第一条记录之前,必须调用一次 next() 才能读取数据
- 读取字段值时可以用字段名(getString(“name”))或字段下标(getString(2)),下标从1开始,推荐用字段名,可读性更好且不受 select 字段顺序影响
- 查询条件用 PreparedStatement 参数化,防止sql注入
- 如果查询可能返回多条记录,while(resultSet.next()) 会逐条遍历;如果确定只有一条,可以用 if(resultSet.next()) 配合 First() 或直接取
- 也可以用 Statement 执行查询,但不推荐:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select id, name from user where name = '王五'");Code language: JavaScript (javascript)
- 查询全部记录:
PreparedStatement ps = conn.prepareStatement("select id, name from user");
ResultSet rs = ps.executeQuery();Code language: JavaScript (javascript)
- 资源关闭顺序:ResultSet → Statement → Connection,示例关闭了 Statement 和 Connection,ResultSet 也建议显式关闭(或用 try-with-resources 自动管理)
Previous: 使用JDBC修改表记录
Next: JDBC帮助类的封装