2012-05-15 88 views
0

iv创建了一个与MySQL非常协调的程序。然而,当我将它转换为SQLlite时,一切工作,如创建表,getConnection()到数据库和这样的EXCEPT值插入表? 我无法使用Java(Netbeans)向SQLite数据库插入值。我只能插入一行而不是多行?在MySQL中,我可以一次插入多行,但是,我不能在SQLite中?Java - MySQL - > SQLite - 无法使用java插入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中,出于某种原因,我只能更新一行? 但是,与MySQL的Java工作正常,但不是SQLlite。

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

+0

非常感谢快速回复:)。 – Aaqib

回答

0

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

SQLite自3.7.11版起支持它。

如果有下这一个版本,你需要做一个插入的每一行...

+0

哦k和我确定我下载了sqlite的lateat版本,但无论如何非常感谢您的快速回复 – Aaqib

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兼容的数据库。

+0

谢谢我要给这个尝试tommorow,并希望一切顺利谢谢:) – Aaqib

+0

我忘了添加 - 我没有添加一个'值',但是,它没有工作。我正按照'joev'所述的准备好的陈述去做。非常感谢您的帮助 – Aaqib