首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多次重用PreparedStatement

多次重用PreparedStatement
EN

Stack Overflow用户
提问于 2010-03-18 09:55:40
回答 1查看 105.7K关注 0票数 104

在使用具有单个公共连接而没有任何池的PreparedStatement的情况下,我可以为每个具有预准备语句功能的dml/sql操作重新创建一个实例吗?

我的意思是:

for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}

而不是:

PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();

我的问题是,我想把这段代码放到多线程环境中,你能给我一些建议吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2010-03-18 10:03:51

代码中的循环只是一个过于简单的例子,对吧?

最好只创建一次PreparedStatement,然后在循环中反复使用它。

在不可能做到这一点的情况下(因为它使程序流过于复杂),使用PreparedStatement仍然是有益的,即使您只使用一次,因为服务器端的工作(解析SQL和缓存执行计划)仍然会减少。

为了解决您希望重用Java端PreparedStatement的情况,一些JDBC驱动程序(例如Oracle)有一个缓存特性:如果您在相同的连接上为相同的PreparedStatement创建一个SQL,那么它将为您提供相同的(缓存的)实例。

关于多线程:我不认为JDBC连接可以跨多个线程共享(即由多个线程并发使用)。每个线程都应该从池中获取自己的连接,使用它,然后再次将它返回到池中。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2467125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档