使用JDBC查找表记录

使用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 自动管理)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注