rewriteBatchedStatements引入了语法错误

时间:2017-03-08 20:58:33

标签: java mysql jdbc

我正在优化一些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前面添加分号?

1 个答案:

答案 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 (?, ?);

删除尾随分号可以解决我的问题。