看起来语法没问题,但不知道该怎么办?请弄清楚。
这里是要插入的行之一: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/