0

iv 创建了一个非常适合 MySQL 的程序。但是,当我将其转换为 SQLlite 时,一切正常,例如创建表、getConnection() 到数据库以及向表中插入值除外?我无法使用 Java (Netbeans) 将值插入到 SQLite 数据库的表中。我只能插入一行但不能插入多行?在 MySQL 中,我可以一次插入多行,但是,我不能在 SQLite 中?

代码是(这仅适用于一行):

       Connection con;
       Statement s= con.CreateStatement();
       String st = "Insert into table1 (10,'abc')";
       s.executeUpdate(st);
       s.close();

如果我做这样的事情(不工作超过一行 - 不知道为什么 - SQLite):

         Connection con;
         Statement s= con.CreateStatement();
         String st = "Insert into table1 (10,'abc'), (5,'vfvdv')"; //now it doesnt    work since Im inserting more than one row. I can't figure out what Im doing wrong - 
         //Iv also tried Insert into table1(ID, Name) values (10,'abc'), (5,'afb'); but it dont work.
        s.executeUpdate(st);
        s.close();

任何java专家或任何人都可以帮助我解决这个问题。我无法弄清楚我做错了什么或任何事情,因为当我在“SQLite”命令行中键入我的命令时,它适用于所有。但是,在带有 SQLite 的 JAVA 中,由于某种原因我只能更新一行?但是,Java 和 MySQL 可以正常工作,但 SQLlite 不行。

任何人都可以澄清我做错了什么会很棒。非常感谢您阅读本文和您的时间。

4

2 回答 2

2

SQLite JDBC 驱动程序可能不支持多插入语法。这种语法也不是标准的,尽管许多数据库都支持它。

像这样进行多次插入的另一种选择是使用 PreparedStatement 的批处理机制。

Connection conn = ....;
PreparedStatement stmt = 
  conn.prepareStatement("INSERT INTO table1(id, name) VALUES (?, ?)");

stmt.setInt(1, 10);
stmt.setString(2, "abc");
stmt.addBatch();

stmt.setInt(1, 5);
stmt.setString(2, "vfvdv");
stmt.addBatch();

stmt.executeBatch();

通常,您会在循环中使用 setInt、setString、addBatch 序列,而不是像我在这里展示的那样展开,并在循环之后调用 executeBatch。这将适用于所有 JDBC 兼容的数据库。

于 2012-05-15T01:44:38.420 回答
0

根据 SQL92 标准,多行插入不是标准的。

SQLite 从 3.7.11 版本开始支持它。

如果您在此版本下有一个版本,则需要为每一行插入一个...

于 2012-05-15T01:43:18.750 回答