我做了一个java类,它运行在它自己的线程中,通过mysql查询队列工作,以便它不会阻塞主应用程序线程。我想使用预准备语句,但是如果我继续重复使用相同的准备好的语句,那么如果队列中有两个或多个相同的准备语句(对于每种类型的查询使用相同的准备语句对象),它将会出错PARAMS。如果我每次创建一个新的预编译语句,每次都会重新编译准备好的语句,或者它会检测到它已经被编译并执行?多线程 - MySQL java连接器准备语句使用
1
A
回答
2
我觉得你真的不会成为能够利用预处理语句缓冲池在Java中连接池的实现,如Apache DBCP可用功能。这是因为您正在将准备好的语句对象存储在队列中。如果你能存储你的SQL和paramenters在自定义类代替,并创建/执行中的执行线程的PreparedStatement,你可以通过使用类似DBCP
参见如何启用语句池(poolPreparedStatements)DBCP configurations docs得到统筹的好处
1
它会在每次运行时重新编译准备好的语句,还是会检测到它已经被编译并执行?
它是由数据库管理系统,而不是Java,但总的想法是,它可以检测到引擎盖下的现有编译声明和水池他们的重用,无论是在驱动程序或服务器。请参阅JDBC 4.0规范#11.6“通过池连接的语句的重用”。
0
Java教程
如果要执行Statement对象多次,通常降低了使用PreparedStatement对象,而不是执行时间。
PreparedStatement对象的主要特征是,与Statement对象不同,它在创建时会被赋予一个SQL语句。这样做的好处是,在大多数情况下,这个SQL语句会立即发送到DBMS,在那里编译它。因此,PreparedStatement对象不仅包含一条SQL语句,还包含一条预编译的SQL语句。这意味着当PreparedStatement被执行时,DBMS可以直接运行PreparedStatement SQL语句,而不必先编译它。
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html#supply_values_ps
相关问题
- 1. Java:准备没有连接的语句
- 2. mysql准备语句java
- 3. 在MySQL中使用准备好的语句和连接池
- 4. 我如何准备多个左连接的mysql语句?
- 5. 没有服务器端准备好的语句使用MySQL连接器/ J
- 6. Python mysql连接器准备INSERT语句中断文本
- 7. MySQL中使用变量准备语句
- 8. Java/MySQL准备语句错误
- 9. PHP MySQL准备语句准备()失败
- 10. Mysql select JAVA语句编写准备
- 11. mysql永久准备语句
- 12. 重用连接并准备语句到mysql数据库
- 13. MYSQL-PDO准备语句
- 14. MySQL准备语句使用变量
- 15. MySQL的太多准备的语句
- 16. MySQL准备语句nvarchar
- 17. 准备语句
- 18. MySQL准备语句失败
- 19. Django的mysql准备语句
- 20. MySQL准备好的语句
- 21. mysql准备了语句IFNULL
- 22. 连接管理器准备语句语法
- 23. 在java中准备语句
- 24. java准备语句java.sql.SQLException:ORA-01747
- 25. Mysql查询Mysql和准备语句
- 26. 使用groovy.sql.Sql或JDBC在Grails中准备连接池和准备语句
- 27. 内部连接在java中准备sql语句
- 28. MySQLi多个准备语句
- 29. 如何使用多个准备语句(mysql,PDO)?
- 30. 如何从mysql中使用预准备语句获取多行
这几乎是我最终做的。 –