您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

8.3. 发出查询和处理结果

在任何你想向数据库运行一个 SQL 语句的时候, 你都需要一个 Statement PreparedStatement 实例. 一旦你拥有了一个 Statement PreparedStatement ,你就可以 发出一个查询. 这样将返回一个 ResultSet 实例, 在其内部包含整个结果. Example 8-1 演示了这个过程.

Example 8-1. 在 JDBC 里处理一个简单的查询

这个例子将发出一个简单的查询然后用一个 Statement 打印出每行的第一个字段.

Statement st = db.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable where columnfoo = 500");
while(rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

这个例子将使用 PreparedStatement 发出和前面一样的查询,并且在查询中制作数值.

int foovalue = 500;
PreparedStatement st = db.prepareStatement("SELECT * FROM mytable where columnfoo = ?");
st.setInt(1, foovalue);
ResultSet rs = st.executeQuery();
while(rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

8.3.1. 使用 Statement PreparedStatement 接口

在使用 Statement PreparedStatement 接口时必须考虑下面的问题:

  • 你可以将一个 Statement PreparedStatement 实例使用任意次. 你可以在打开一个联接后马上创建一个 Statement 实例, 并且在联接的生存期里使用之. 你必须记住每个 Statement PreparedStatement 只能存在一个 ResultSet

  • 如果你需要在处理一个 ResultSet 的时候执行一个查询, 你只需要创建并且使用另外一个 Statement

  • 如果你使用了 threads (线程),并且有几个使用数据库, 你对每个线程必须使用一个独立的 Statement . 如果考虑使用线程, 请参考本文档稍后的 Section 8.8 章节, 因为这些内容包含一些重要的信息.

  • 在你用完 Statement 或者 PreparedStatement 之后,你应该关闭它.

8.3.2. 使用 ResultSet (结果集)接口

使用 ResultSet 接口时必须考虑下面的问题:

  • 在读取任何数值的时候,你必须调用 next() . 如果还有结果则返回真(true),但更重要的是,它为处理准备了数据行.

  • JDBC 规范里,你对一个字段应该只访问一次. 遵循这个规则是最安全的,不过目前 PostgreSQL 驱动将允许你对一个字段访问任意次.

  • 一旦你结束对一个 ResultSet 的处理,你必须对之调用 close() 来关闭它。

  • 一旦你使用那个创建 ResultSet Statement 做另一个查询请求, 当前打开的 ResultSet 实例将自动关闭.

  • 目前的 ResultSet 是只读的. 你不能通过 ResultSet 来更新数据. 如果你想更新数据,那么你就需要使用老式的风格来做它∶ 通过发出一条 SQL 更新语句.这么做是和 JDBC 规范兼容的,它并不要求驱动提供这个功能.