我写了一个程序,用单词列表填充数据库。问题是,每次我尝试运行代码时,它都会引发“线程“ main”中的异常” java.sql.SQLException:在“ s”附近:语法错误”。我知道在此论坛上也曾提出过类似的问题,但是在我的代码中,我无法纠正该错误。
因此,我求助于您。
这是代码
import java.io.*; import java.sql.*; import java.util.Scanner; public class db_populate { public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException { Connection c = null; Statement stmt = null; Scanner in = null; String word; String wordcat; String j, sql; int i = 0; Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:dictionary.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); in = new Scanner(new File("wordsEn.txt")); while (in.hasNext()) { word = in.nextLine(); i++; j = Integer.toString(i); wordcat = word.substring(0, 2); sql = "INSERT INTO WORDS (ID,CAT,WORD) " + "VALUES(" + j + ",'" + wordcat + "','" + word + "');"; stmt.executeUpdate(sql); } stmt.close(); c.commit(); c.close(); in.close(); System.out.println("Records created successfully"); } }
这些是我跑步时遇到的错误。
Opened database successfully Exception in thread "main" java.sql.SQLException: near "s": syntax error at org.sqlite.core.NativeDB.throwex(NativeDB.java:397) at org.sqlite.core.NativeDB._exec(Native Method) at org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116) at db_populate.main(db_populate.java:34)
使用PreparedStatement避免输入错误的问题:
PreparedStatement p = c.prepare("INSERT INTO WORDS (ID,CAT,WORD) VALUES(?, ?, ?)"); p.setInt(1, i); p.setString(2, wordcat); p.setString(3, word); p.execute(); //commit results if using InnoDB, etc