2010-05-20 97 views
6

正如我们Android开发人员所知,SQLiteDatabaseexecSQL方法只能执行一条语句。Android上有效的批量SQL查询执行,用于升级数据库

的医生说:

执行一个SQL语句不是查询。例如,CREATE TABLE,DELETE,INSERT等。不支持由; s分隔的多个语句。

我必须加载一批记录,1000和计数。
如何有效地插入这些?
什么是最简单的方式来提供这些SQL与你的apk?

我提到,已经有一个系统数据库,我将在onUpdate事件上运行这个。

我到目前为止这样的代码:

List<String[]> li = new ArrayList<String[]>(); 
     li.add(new String[] { 
       "-1", "Stop", "0" 
     }); 
     li.add(new String[] { 
       "0", "Start", "0" 
     }); 
    /* the rest of the assign */ 
try { 
     for (String[] elem : li) { 
      getDb().execSQL(
        "INSERT INTO " + TABLENAME + " (" + _ID + "," + NAME + "," + PARSE_ORDER 
          + ") VALUES (?,?,?)", elem); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

16

如何插入这些有效?

使用事务:

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

我觉得你有什么是加载这些1000条记录的唯一途径,现在,只要部署的DB与您的APK文件,看看这个帖子:

http://www.helloandroid.com/tutorials/how-have-default-database

+0

我记录关于这个问题,所有的解决方案是基于独家,我们创建一个新的数据库的事实。但是我需要升级,因此替换现有的数据库并不好,我必须保留用户的资料。 – Pentium10 2010-05-20 18:02:30

+0

没有理由不能使用两个数据库 - 一个用户数据库和一个静态信息数据库。这样,您可以在升级时完全替换静态数据库,同时保持用户数据不变。 – 2010-05-20 20:07:01

相关问题