我目前正在尝试通过Java程序将txt文件写入mySQL数据库。我的数据库通过JDBC驱动程序正确连接,我可以通过程序创建表等。但是,当我尝试读取文本文件时,我收到此错误消息
java.sql.SQLException:您的SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以获得在'' FName'附近使用的正确语法。 ,' SName' ,' DOB')价值观(' John',' McCullough'' 270696')'在第1行
我在SQL代码中找不到错误。这是该类的其余代码。任何帮助将不胜感激。
try (Connection con = DriverManager.getConnection(dbUrl, dbUsername, dbPassword)) {
FileReader file1 = new FileReader("resources/Test.txt");
BufferedReader buffer1 = new BufferedReader(file1);
String read;
while ((read = buffer1.readLine()) != null) {
String[] row = read.split(",");
String fName = row[0];
String sName = row[1];
String DOB = row[2];
String insert = "INSERT INTO chessleague.table1 ('FName' , 'SName' , 'DOB') VALUES ('" + fName + "' , '" + sName + "' , '" + DOB + "')";
ps = con.prepareStatement(insert);
ps.executeUpdate();
ps.close();
}
} catch (Exception ex) {
System.out.println(ex);
}
答案 0 :(得分:1)
如评论中所述,不要引用列名。
代码严重滥用预准备语句来执行简单的SQL。 Connection
类有一个createStatement()
方法,可以创建一个简单的语句,用于文本格式的SQL命令。
Statement stmt = con.createStatement();
stmt.execute("SELECT * from test.t1");
Prepared语句需要一个用于创建SQL语句的模板。这是一个如何使用预准备语句命令完成插入的示例。
try (PreparedStatement ps = con.prepareStatement("INSERT INTO chessleague.table1 (FName , SName , DOB) VALUES (?, ?, ?)")) {
ps.setString(0, fName);
ps.setString(1, sName);
ps.setString(2, DOB);
ps.execute();
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
}