2017-05-02 2 views
0

構文は問題ないようですが、何をすべきかわかりません。親切にそれを理解してください。 INSERT INTO SmartMiner(Outlook VARCHAR(64)、Temp VARCHAR(64)、Humidity VARCHAR(64)、Windy VARCHAR(64)、Play VARCHAR(64))VALUEこれらの値は、 ( 'sunny、hot、high、false、no')バッチ更新例外、1行目のINSERT文の近くで使用される構文が間違っています

例外: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(); 

    } 

答えて

1

VALUES ('sunny,hot,high,false,no') - これは完全に間違っています。これはのテキストフィールドです。テーブル名の後に記載された列の数が指定されています。

それは次のようになります。

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

VALUES句を生成するためのロジック(つまり、line変数)を修正する必要があります。ファイルから行を読み込むだけですが、その行が正しくフォーマットされていないか、その行を解析してクエリを構築することが多くなると予想されます。

関連する問題