我想为 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/