当前位置: 首页 > 知识库问答 >
问题:

应用程序在服务器上运行查询时出现MySQL语法错误,但在工作台上运行时不出现语法错误

唐啸
2023-03-14
truncate table A;load data local infile '~/some.csv' into table A fields terminated by ',' OPTIONALLY ENCLOSED BY '\"' (COLUMN1,COLUMN2,COLUMN3)
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);

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

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

共有1个答案

端木阳荣
2023-03-14

正如在一个现已删除的注释中提到的,您的问题可能是试图执行多条MySQL语句,而MySQL处于禁止多条语句的模式。一个解决办法是将连接URL更改为如下所示:

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

下面是一个代码片段,展示了如何做到这一点:

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下面的评论,在这里执行单独的语句可能是更安全的选择。

 类似资料:
  • 嘿,伙计们,我试图ru我的模拟器,但当我运行它,它给我这个错误: “安装下列Android SDK包失败,因为某些许可证尚未被接受。构建-工具;30.0.2 Android SDK构建-工具30.0.2若要构建此项目,请接受SDK许可协议并使用Android Studio SDK管理器安装缺少的组件。或者,若要将许可协议从一个工作站转移到另一个工作站,请参见http://d.Android.com

  • 在Android mobile上运行应用程序时出现此错误 正在调试模式下在DRA LX2上启动lib\main.dart...正在运行分级任务“Assemble Debug”...√build build\app\outputs\flutter-apk\app-debug.apk。正在安装build\app\outputs\flutter-apk\app.apk...错误:ADB退出,退出代码为1

  • 在运行简单的GWT应用程序时获取错误。当我用ant通过命令行运行时,它工作得很好,但在IntelliJ中导入后,我得到了这个错误。不知道为什么我会得到这个错误:

  • > 我开发了一个javaFx应用程序,并在Mac的com.zenjava maven插件的帮助下创建了该应用程序的中间包。 bundle是用JDK:1.7.0_40.jdk创建的

  • 我正在尝试使用SQLite数据库在android中本地存储电子邮件。当我第一次调用,该数据库尚不存在,已创建。我在create语句中遇到语法错误。。。我的代码看起来像这样。。。 我不熟悉SQLite语法,我一直在寻找导致这种情况的原因,但没有任何结果。知道是什么引起的吗?数据库确实是本地存储此类数据的最佳方式。 准确的错误如下所示。。

  • 我试图运行这里提供的这个Spring会话示例,但我使用了Maven而不是Gradle。我在a)运行WAR文件和b)在WildFly8中部署WAR时都出现以下错误。2服务器 快速搜索表明,问题可能是pom中引用的各种依赖项之间的版本冲突。xml。 根本原因是什么 运行或部署WAR时出错 这是我的完整POM。xml