我的应用程序在无限循环的每次迭代中使用一些预处理语句。 是否可以安全地在循环之前创建preparedStatement并在循环中仅运行pstmt.execute?
简单陈述也很有趣。
答案 0 :(得分:6)
是的,这很好,而且是使用PreparedStatements的一个要点(语句被编译一次,然后可以多次运行)。
只要您没有从多个(不同的)线程调用相同的语句,这将按预期工作。从多个线程调用相同的语句可能会导致问题,因为在这些条件下这些对象不能保证是线程安全的。
答案 1 :(得分:4)
这就是准备好的陈述 - 准备一次并多次使用它们。
答案 2 :(得分:4)
“无限循环”?对不起,这听起来不错。
当人们说在循环中多次调用预准备语句是个好主意时,人们是正确的。但隐含的是一个有明确开始和结束的循环。
我怀疑你的“无限循环”。听起来更像是一个监听器,你想要保持活着以响应某些数据库事件。
答案“很好”是正确的,但详细了解你正在做的事情可能会很有趣。
评论后更新:
我有一个监听事件的Atom RSS服务器。当请求进来时,我会让RSS监听器将其交给一个服务,该服务将从连接池中获取连接,启动事务,在方法范围内创建预准备语句,插入消息,关闭准备好的语句在方法范围内的finally块中,提交事务,并将连接返回到池。
JDBC驱动程序或数据库将缓存PreparedStatements,因此效率不高。不需要挂在一个上面。
没有无限循环。没有线程问题。