java - 为什么我需要一个连接来创建 PreparedStatements?

标签 java sql jdbc prepared-statement

我想为 many reasons 使用准备好的语句. 但是,我想创建一个如下所示的方法:

/* This opens a connection, executes the query, and closes the connection */
public static void executeNonQuery(String queryString);

换句话说,我希望我的应用程序逻辑只需要制定查询和输入参数,而不是处理连接和语句。但是,PreparedStatements 是从连接对象创建的,因此我目前被迫使用 String.format() 准备查询字符串 - 但丑陋且危险。

有没有办法在不使用 String.format() 的情况下完成我想做的事情?

最佳答案

Why do I need a connection to create PreparedStatements ?

因为在大多数 RDBMS 中,语句都是基于每个连接准备的。

准备好的语句实际上是缓存的执行计划,不会将您的权限、编码、排序规则设置等考虑在内。

所有这些都是在查询解析期间完成的。

Is there a way to do what I want without using String.format()

不明白为什么你需要 String.format() 在这里。

您可以将查询实现为类,创建连接并在类构造函数中准备查询,然后在方法中执行它。

参数化查询通常如下所示:

SELECT  *
FROM    table
WHERE   col1 = ?
        AND col2 = ?

,其中绑定(bind)参数将在查询执行期间替换 ?

如果你想要一个static方法:

  • 创建一个static 连接句柄。
  • 使用参数化查询文本作为,并将准备查询的句柄作为,创建准备好的查询的静态哈希表>.
  • 每当您想执行查询时,找到它的句柄(如果没有找到则创建它)并使用 to 绑定(bind)参数并执行查询。

关于java - 为什么我需要一个连接来创建 PreparedStatements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/964989/

相关文章:

java - 我可以使用 Apache POI 在同一张工作表中同时创建卡住 Pane 和分割 Pane 吗?

java - 如何在使用 rs2xml 填充的 Jtable 中添加复选框

java - 使用 URLConnection 发送和检索 map

Java JUnit 无法解析import org

java 。用于创建对象实例的字符串内容

sql - 避免在一个查询中多次使用同一个子查询

sql - 将已排序的加载文件加载到新表中时,是否需要 CLUSTERED INDEX?

sql - SQL Server 2008 R2 中带有值计数的交叉表查询

java - PostgreSQL JDBC getGeneratedKeys 返回所有列

java - JayDeBeApi 连接崩溃