PostgreSQL JDBC 执行 select 查询表记录

PostgreSQL jdbc 执行 select 查询语句需要用到 Statement 或者 PreparedStatement 类对象,通过这两个类对象执行 SQL 语句,返回 ResultSet 类对象用于存储结果集。

从 PreparedStatement 和 Statement 的名称可能推断出 PreparedStatement 适用于预编译绑参方式执行 SQL 语句,而 Statement 是直接执行 SQL 语句。但是实际执行时发现 Statement 也是通过预编译方式执行,如果想要直接执行,需要指定连接参数 preferQueryMode,将其设置为 simple 模式,如下:

props.setProperty("preferQueryMode", "simple");

1. Statement 执行 SQL

初始化数据库表数据,创建表 student,插入 2 条数据,如下:

postgres=> select * from student;
 id | name | age
----+------+-----
  1 | Tom  |  18
  2 | Jim  |  19
(2 rows)

查询 student 表所有记录,将结果输出,代码如下:

import java.sql.*;
import java.util.Properties;

public class Main{
    public static void main(String[] args)
    {
        String url = "jdbc:postgresql://127.0.0.1:36099/postgres";
        Properties props = new Properties();
        props.setProperty("user", "admin");
        props.setProperty("password", "123456");
        props.setProperty("preferQueryMode", "simple");
        try {
                Connection conn = DriverManager.getConnection(url, props);

                Statement st = conn.createStatement();
                ResultSet rs = st.executeQuery("select * from student");
                while(rs.next()){
                    int id = rs.getInt(1);
                    String name = rs.getString(2);
                    int age = rs.getInt(3);
                    System.out.println("id:" + id + " name:" + name + " age:" + age);
                }
                rs.close();
                st.close();
                conn.close();
        }catch (SQLException e) {
                e.printStackTrace();
        }
    }
}

编译执行结果:

[zhang@localhost java]$ javac -Djava.ext.dirs=jdbc Main.java
[zhang@localhost java]$ java -Djava.ext.dirs=jdbc Main
id:1 name:Tom age:18
id:2 name:Jim age:19

2. PreparedStatement 执行 SQL

PreparedStatement 类对象可以执行预编译绑参的 SQL 语句,一次编译,多次执行,性能会有所提升。下述示例查询 student 表中名称为 Tom 的记录,将查询结果输出,代码如下:

import java.sql.*;
import java.util.Properties;

public class Main{
    public static void main(String[] args)
    {
        String url = "jdbc:postgresql://127.0.0.1:36099/postgres";
        Properties props = new Properties();
        props.setProperty("user", "admin");
        props.setProperty("password", "123456");
        try {
                Connection conn = DriverManager.getConnection(url, props);
                PreparedStatement st = conn.prepareStatement("select * from student where name=?");
                st.setString(1, "Tom");
                ResultSet rs = st.executeQuery();
                while(rs.next()){
                    int id = rs.getInt(1);
                    String name = rs.getString(2);
                    int age = rs.getInt(3);
                    System.out.println("id:" + id + " name:" + name + " age:" + age);
                }
                rs.close();
                st.close();
                conn.close();
        }catch (SQLException e) {
                e.printStackTrace();
        }
    }
}

执行结果:

[zhang@localhost java]$ javac -Djava.ext.dirs=jdbc Main.java
[zhang@localhost java]$ java -Djava.ext.dirs=jdbc Main
id:1 name:Tom age:18

文章评论

0条评论