【问题标题】:Batch Update Exception, wrong syntax used near INSERT statement at line 1批量更新异常,在第 1 行的 INSERT 语句附近使用了错误的语法
【发布时间】:2017-05-02 16:08:51
【问题描述】:

似乎语法很好但不知道该怎么做?请弄清楚。

这是要插入的行之一:INSERT INTO SmartMiner ( Outlook VARCHAR(64),Temp VARCHAR(64),Humidity VARCHAR(64),Windy VARCHAR(64),Play VARCHAR(64) ) VALUES ('sunny,hot,high,false,no')

异常: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();

    }

【问题讨论】:

    标签: java mysql sql-server


    【解决方案1】:

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

    应该是:

    VALUES ('sunny','hot','high','false','no').

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多