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条评论