Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:将多行插入sqlite数据库不工作_Android_Sqlite - Fatal编程技术网

Android:将多行插入sqlite数据库不工作

Android:将多行插入sqlite数据库不工作,android,sqlite,Android,Sqlite,对于android项目,我使用以下方法将单行插入数据库 myDB.execSQL("INSERT INTO " + Buss + " (BussName, RouteName)" + " VALUES ('buss1', 'buss2');"); 它很好用。我看到了这个链接。我在我的android项目中尝试了这种方法(插入多行),但它不起作用 myDB.execSQL("INSERT INTO " + Buss + " (BussName, RouteName)" + " VALU

对于android项目,我使用以下方法将单行插入数据库

myDB.execSQL("INSERT INTO "
 + Buss
 + " (BussName, RouteName)"
 + " VALUES ('buss1', 'buss2');");
它很好用。我看到了这个链接。我在我的android项目中尝试了这种方法(插入多行),但它不起作用

myDB.execSQL("INSERT INTO "
 + Buss
 + " (BussName, RouteName)"
 + " VALUES ('buss1', 'buss2'),('buss1', 'buss2'),('buss1', 'buss2');");

如何操作?

多行插入只能在SQLite 3.7.11或更高版本中工作,但只有jellybean和kitkat支持SQLite 3.7.11

您需要为每行调用单独的插入语句

出于性能原因,您可以将每几次调用(比如~20次)分组到一个事务中:

myDb.beginTransaction();
   for(<your loop definition>){ myDb.execSQL(<your insert statement>) }
myDb.setTransactionSuccessful();
myDb.endTransaction();
myDb.beginTransaction();
for(){myDb.execSQL()}
myDb.setTransactionSuccessful();
myDb.endTransaction();
其主要思想不是在插入的每一行上写入物理数据库文件,而是每隔几行写入一次。另一方面,只要插入的数据没有保留在“驱动器”上,它就在内存中。对于小数据集,您可以在一个块中启动事务、进行所有插入和结束事务

对于更大的数据,您应该使事务更小


使用准备好的语句而不是标准语句也是一个好主意,因为SQL解释器只需要解析查询一次-更多信息可以在这里找到:

您能展示如何创建Buss表吗?@RanjitPati myDB.execSQL(“如果不存在创建表”+Buss+”(BussName VARCHAR(30),RouteName VARCHAR(30))@你是说BussName,RouteName到BussName,RouteName?我试过了,它不起作用。我找不到任何其他不同之处。。如果您能找到它,请提供帮助。是否有其他方法使用myDB.execSQL?您可以使用myDB.insertmethod@piotrpo你的第一个答案是工作。如何使用第二个答案?注意:您需要调用
myDb.setTransactionSuccessful()endTransaction()
之前执行code>,以便提交更改。您正在测试哪个版本?是的,我很确定。你在模拟器上测试吗?检查它在android上使用的版本,如果您在设备上测试,请转到设置并查看android版本,找出您可以使用的sqlite版本
adb shell sqlite3--version
4.0.3 android版本