java - 批量更新异常,第 1 行 INSERT 语句附近使用了错误的语法

标签 java mysql sql-server

看起来语法没问题,但不知道该怎么办?请弄清楚。

这里是要插入的行之一:INSERT INTO SmartMiner ( Outlook VARCHAR(64),Temp VARCHAR(64),Humidity VARCHAR(64),Windy VARCHAR(64),Play VARCHAR(64) ) VALUES('晴朗、炎热、高、假、否')

异常:java.sql.BatchUpdateException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“VARCHAR(64)、Temp VARCHAR(64)、Humidity VARCHAR(64)、Windy VARCHAR(64)、Play VARCHAR”附近使用的正确语法

    public void FileRead(String st, String tableName) {

    Statement stmt = null;
    String sql = null;
    BufferedReader br = null;
    try {

    FileReader fr = new FileReader(st);
    br = new BufferedReader(fr);

    String line = br.readLine();
    System.out.println(line);
    String[] tokens = line.split(",");
    for(int x=0;x<tokens.length;x++){
        System.out.println(tokens[x]);
    }

    setConnection();

    //connection.setAutoCommit(false);

    stmt = connection.createStatement();

    DatabaseMetaData metadata = connection.getMetaData();
    ResultSet resultSet;
    resultSet = metadata.getTables(null, null, "tableName", null);
    if(resultSet!=null){
      // next() checks if the next table exists ...
         System.out.println("Table exists");

        sql = "DROP TABLE IF EXISTS " + tableName;
        System.out.println("sql :" + sql);
         stmt.executeUpdate(sql);
    }


    String query = "";
    String comma = "";

    for (String token : tokens) {
    query += comma + token;
    comma = ",";
    }
    sql = "CREATE TABLE SmartMiner (" + query + ")";
    System.out.println("sql :" + sql);
    stmt.executeUpdate(sql);

    line = br.readLine();
    if(line != null){
        System.out.println(line);
    }
    while (line != null) {
    sql = "INSERT INTO "+tableName+"("+query+")"+"VALUES("+line+")";
    System.out.println("sql :" + sql);
    stmt.addBatch(sql);
    line = br.readLine();
    }

    stmt.executeBatch();
    //connection.commit();
    closeConnection();

    }

最佳答案

VALUES ('sunny,hot,high,false,no') - 这是完全不正确的。鉴于表名称后提到的列数,这是一个文本字段,而不是 5 个。

应该是:

VALUES('晴朗'、'热'、'高'、'假'、'否')

您需要修复生成 VALUES 子句(即 line 变量)的逻辑。它似乎只是从文件中读取一行,但是该行的格式不正确,或者您需要做更多的工作来解析它并构建查询。

关于java - 批量更新异常,第 1 行 INSERT 语句附近使用了错误的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742568/

相关文章:

c# - 在 SQL Server 身份验证中执行存储过程所需的角色

java - 安装第 3 方 JAR

asp.net 4.0 Web 服务无法在服务器上运行;有人可以校对代码吗?

c# - 将自定义日期转换为mysql日期时间

mysql - 使用 ORDER BY 覆盖索引

sql - 具有异步结构的openxml

java - Jaas LoginModule 范围和 session 处理

java - 插入到已排序的 LinkedList Java

Java jsp 标签库

mysql - SQL complex GROUP BY 在两个字段中的任何一个上