【问题标题】:Android : Insert multiple rows into sqlite database not workingAndroid:将多行插入sqlite数据库不起作用
【发布时间】:2014-04-21 01:58:09
【问题描述】:

我正在使用以下 android 项目方法将单行插入数据库。

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

它工作正常。我看到了这个链接Inserting multiple rows in sqlite database。我在我的android项目中尝试了这种方法(插入多行),但它不起作用。

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

怎么做?

【问题讨论】:

  • 你能展示一下你是如何创建 Buss 表的吗?
  • @RanjitPati myDB.execSQL("CREATE TABLE IF NOT EXISTS" + Buss + " (BussName VARCHAR(30),RouteName VARCHAR(30));");
  • @unluddite 你的意思是 BussName, RouteName to 'BussName', 'RouteName' ?我试试它不起作用。我找不到任何其他的不同..如果你能找到它请帮忙..

标签: android sqlite


【解决方案1】:

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

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

myDb.beginTransaction();
   for(<your loop definition>){ myDb.execSQL(<your insert statement>) }
myDb.setTransactionSuccessful();
myDb.endTransaction();

主要思想是不要在每个插入的行上写入物理数据库文件,而是每隔几行。另一方面,只要插入的数据不保留在“驱动器”上,它就在内存中。对于小型数据集,您可以在一个块中启动事务、进行所有插入和结束事务。

对于更大的数据,您应该使交易更小。

使用准备好的语句代替标准语句也是一个好主意,因为 SQL 解释器只需要解析一次查询 - 更多信息可以在这里找到:How do I use prepared statements in SQlite in Android?

【讨论】:

  • 有没有使用 myDB.execSQL 的替代方法?
  • 你可以使用 myDb.insert 方法
  • @piotrpo 你的第一个答案是工作。如何使用您的第二个答案?
  • 注意:您需要在endTransaction() 之前调用myDb.setTransactionSuccessful(); 才能提交更改。
【解决方案2】:

多行插入仅适用于 SQLite 3.7.11 或更高版本,但只有 jellybean 和 kitkat 支持 Sqlite 3.7.11

【讨论】:

  • 您正在测试哪个版本?是的,我很确定。
  • 你在模拟器上测试?检查它使用的是android上的哪个版本,如果您在设备上测试,请转到设置并查看android版本
  • 找出可以使用的sqlite版本adb shell sqlite3 --version
  • 4.0.3 安卓版
猜你喜欢
  • 2011-12-16
  • 2015-01-24
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多