【问题标题】:MySQL syntax error when query run by app on server but not when run in workbench查询由服务器上的应用程序运行但在工作台中运行时没有 MySQL 语法错误
【发布时间】:2017-09-08 10:55:09
【问题描述】:

我有一个这样的 MySQL 查询:

truncate table A;load data local infile '~/some.csv' into table A fields terminated by ',' OPTIONALLY ENCLOSED BY '\"' (COLUMN1,COLUMN2,COLUMN3)

当我在工作台中运行它时它运行完美,但当它由 java 应用程序执行时:

String qry = "truncate table A;load data local infile '~/some.csv' into table A fields terminated by ',' OPTIONALLY ENCLOSED BY '\"' (COLUMN1,COLUMN2,COLUMN3)";
Connection con = DriverManager.getConnection(HOST, USER, PASSWORD);
java.sql.Statement stmt = con.createStatement();
stmt.execute(qry);

我明白了:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“将数据本地 infile '~/some.csv' 加载到表 A' 附近使用正确的语法

服务器上的版本是:MySQL 5.6.27

在我的本地机器上是:5.7.19,适用于 Linux (x86_64)

PS:我在工作台中运行的查询是我在 java 应用程序中登录的查询。

【问题讨论】:

标签: mysql


【解决方案1】:

正如现在已删除的评论中提到的,您的问题可能是在 MySQL 处于不允许多条语句的模式时尝试执行多个 MySQL 语句。一种解决方法是将连接 URL 更改为以下内容:

String dbUrl = "jdbc:mysql://localhost:3306/yourDB?allowMultiQueries=true";  

这里有一段代码 sn-p 展示了你将如何做到这一点:

public static void main (String[] args) {
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String HOST = "jdbc:mysql://localhost:3306/yourDB?allowMultiQueries=true";
        String qry = "truncate table A;load data local infile '~/some.csv' into table A fields terminated by ',' OPTIONALLY ENCLOSED BY '\"' (COLUMN1,COLUMN2,COLUMN3)";
        Connection con = DriverManager.getConnection(HOST, USER, PASSWORD);
        java.sql.Statement stmt = con.createStatement();
        stmt.execute(qry);
}
catch (Exception e) {
    System.out.println("failed");
    e.printStackTrace(System.out);
}

这可能是最快的解决方法。如果没有,那么您可以考虑使用批处理,或者只是执行多个语句来截断和加载数据。根据@GaborSch 下面的评论,在这里执行单独的语句可能是更安全的选择。

延伸阅读:

Multiple queries executed in java in single statement

【讨论】:

  • 谢谢,我现在就试试这个。对评论并删除它的人感到抱歉! :-(
  • 我想他的名字是 @fancyPants ,他肯定是 Stack Overflow 的忠实用户!
  • 虽然这解决了你的问题,但我强烈建议不要使用allowMultiQueries=true 功能;默认情况下它是false 是有原因的:它可能会对您的系统造成安全威胁。调用两条 SQL 语句会好很多。
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2017-08-30
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多