分类:
2012-03-04 18:49:34
|
这允许JVM(JavaVirtual Machine,Java虚拟机)和驱动/数据库缓存语句和字符串并提高性能。
PreparedStatement也提供数据库无关性。当显示声明的SQL越少,那么潜在的SQL语句的数据库依赖性就越小。
由于PreparedStatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行SQL语句中没有变量的时候才使用通常的Statement。
发出查询和处理结果
在任何你想向数据库运行一个SQL语句的时候, 你都需要一个 Statement 或 PreparedStatement 实例。 一旦你拥有了一个 Statement 或 PreparedStatement,你就可以 发出一个查询。 这样将返回一个 ResultSet 实例, 在其内部包含整个结果。 演示了这个过程。
Example 31-1. 在 JDBC 里处理一个简单的查询
这个例子将发出一个简单的查询然后用一个 Statement打印出每行的第一个字段。
Statement st = db.createStatement();这个例子将使用 PreparedStatement 发出和前面一样的查询,并且在查询中制作数值。
int foovalue = 500;在使用 Statement或 PreparedStatement接口时必须考虑下面的问题:
你可以将一个 Statement或 PreparedStatement实例使用任意次。 你可以在打开一个联接后马上创建一个 Statement 实例, 并且在联接的生存期里使用之。 你必须记住每个 Statement或 PreparedStatement只能存在一个 ResultSet。
如果你需要在处理一个 ResultSet的时候执行一个查询, 你只需要创建并且使用另外一个 Statement。
如果你使用了 threads (线程),并且有几个使用数据库, 你对每个线程必须使用一个独立的 Statement。 如果考虑使用线程, 请参考本文档稍后的 章节, 因为这些内容包含一些重要的信息。
在你用完 Statement 或者 PreparedStatement 之后,你应该关闭它。
使用 ResultSet接口时必须考虑下面的问题:
在读取任何数值的时候,你必须调用 next()。 如果还有结果则返回真(true),但更重要的是,它为处理准备了数据行。
在 JDBC 规范里,你对一个字段应该只访问一次。 遵循这个规则是最安全的,不过目前 PostgreSQL 驱动将允许你对一个字段访问任意次。
一旦你结束对一个 ResultSet 的处理,你必须对之调用 close()来关闭它。
一旦你使用那个创建 ResultSet的 Statement做另一个查询请求, 当前打开的 ResultSet 实例将自动关闭。
目前的 ResultSet 是只读的。 你不能通过 ResultSet 来更新数据。 如果你想更新数据,那么你就需要使用普通的方法来做∶ 通过发出一条 SQL 更新语句。这么做是和 JDBC 规范兼容的,它并不要求驱动提供可更新的结果集的支持。