尽管有效查询,JDBC仍会抛出MySQL语法异常

时间:2016-07-27 11:26:18

标签: java mysql jdbc

你好,有帮助的人,

我在应用程序中创建了一个基于mysqldump的新数据库模式。 相关部分如下所示:

log.info("= setup basic database");
// Execute each command in the dump
for (String query : dump.split(";")) {
    statement.execute(query);
}

这样可以正常工作,但有些陈述只是打破了

之类的东西
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 ''ot_subtotal.php' at line 1

在这种情况下的查询是

INSERT INTO `configuration` VALUES (194,'MODULE_ORDER_TOTAL_INSTALLED','ot_subtotal.php;ot_discount.php;ot_coupon.php;ot_shipping.php;ot_cod_fee.php;ot_gv.php;ot_subtotal_no_tax.php;ot_tax.php;ot_total_netto.php;ot_total.php',6,0,NULL,'2016-06-17 15:27:24',NULL,NULL);

如果我更换字符串"' ot_subtotal.php; ot_discount.php; ot_coupon.php; ot_shipping.php; ot_cod_fee.php; ot_gv.php; ot_subtotal_no_tax.php; ot_tax.php; ot_total_netto。 PHP; ot_total.php'"喜欢"你好世界"它可以工作,稍后再打破另一个查询。

问题是,我能够通过终端命令" mysql ...<导入转储。 dump.sql"没问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是因为

而发生的
for (String query : dump.split(";")) {
    statement.execute(query);
}

您在;分裂,导致查询不完整。

例如:

INSERT INTO `configuration` VALUES (194,'MODULE_ORDER_TOTAL_INSTALLED','ot_subtotal.php;ot_discount.php;ot_coupon.php;ot_shipping.php;ot_cod_fee.php;ot_gv.php;ot_subtotal_no_tax.php;ot_tax.php;ot_total_netto.php;ot_total.php',6,0,NULL,'2016-06-17 15:27:24',NULL,NULL);

;分割后的上方查询将是

INSERT INTO `configuration` VALUES (194,'MODULE_ORDER_TOTAL_INSTALLED','ot_subtotal.php

哪个不对。

答案 1 :(得分:2)

而不是

dump.split(";")

使用

dump.split(";\n")

如果您以正常方式创建转储文件。