【问题标题】:Android sqlite and multiple queriesAndroid sqlite 和多个查询
【发布时间】:2011-10-25 14:57:08
【问题描述】:

为了填充我的数据库,我有一些这样的循环:

for (int i=0;i<something;++i){
   myDatabase.insert(...);
}

但是当我运行它时,它需要很长时间。所以我想知道如何改善运行时间? 我会尝试像这样只调用一次插入:

String queries="";
for (int i=0;i<something;++i){
   queries += "my query;";
}
myDatabse.execSQL(queries);

但是 execSQL 函数只插入第一个查询,而不插入其他查询。 那我该怎么办呢?

【问题讨论】:

    标签: android sqlite query-optimization


    【解决方案1】:

    您可以尝试用“BEGIN”和“COMMIT”事务将这些插入行括起来。 SQLite 将每个 DML 和 DDL 调用包装在事务块中,创建事务日志,例如在插入之后,它将删除它,这将再次重复(如果是您的第一个代码示例)。

    当你手动执行 TCL 命令时,SQLite 数据库会离开自动事务模式,并会按照你说的去做。

    【讨论】:

      【解决方案2】:

      您是否尝试过在一个语句中插入多行?像这样的:

      INSERT INTO table (c1, c2, c3) VALUES
      (1, 2, 3),
      (4, 5, 6),
      ....
      

      您也可以尝试将插入内容包装在单个 transaction 中。将所有工作放在一个事务中应该可以避免每次插入的锁定开销。

      【讨论】:

      • 运行时间已经被一个事务除以 7,我会尝试再次减少它;)
      【解决方案3】:

      您应该通过一个事务执行所有请求:

      db.beginTransaction();
      try {
          ...
          db.setTransactionSuccessful();
      } finally {
          db.endTransaction();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 2023-03-18
        • 1970-01-01
        • 2012-03-06
        相关资源
        最近更新 更多