我正在优化一些SQL查询。我已经把它们写成批量使用了。集成测试运行良好,一切都很愉快。但后来我了解到,除非启用了rewriteBatchedStatements,否则MySQL不会提高性能。
所以我修改了我的连接字符串以包含rewriteBatchedStatement,但我开始得到一个MySQLSytaxErrorException。当我从连接String中删除rewriteBatchedStatement时,异常就消失了。
SQL:INSERT INTO rawdata.scales (ID, NAME) VALUES (?, ?)
例外:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';INSERT INTO rawdata.scales` at line 1
奇怪的是,这只发生在我设置的测试中运行的第一个SQL语句上。所有其他人都运行良好。
为什么启用此功能会在我的SQL前面添加分号?
答案 0 :(得分:3)
Connector / J 5.1.40中存在一个已知问题,至少包括5.1.43,这会导致在启用rewriteBatchedStatement时在插入时抛出MySQLSytaxErrorException。
请参阅https://bugs.mysql.com/bug.php?id=84813
我能够在带有分号的后续分号中重现这一点,例如
INSERT INTO rawdata.scales (ID, NAME) VALUES (?, ?);
删除尾随分号可以解决我的问题。