将表导入现有的SQLite数据库

时间:2013-11-05 20:13:08

标签: android sqlite insert

在我的应用程序中,首次启动时,我从网上下载了预先填充的数据库。 (相当快)

每隔x次,我需要更新数据库中的一个表。 我不需要旧条目,所以我可以删除它们。

这是我做的: 我删除了表格的所有内容。然后我从网上获取了一个包含我的数据的csv文件,并使用Statement(优化)来执行大量插入... 但是,它需要几分钟(数千行)。

所以,我想知道,因为我不需要旧条目,如何删除表并从网上导入新表?这样,我会避免插入,它应该更快。

这可能吗?

编辑:

这是我的代码,如果可以优化,请纠正我:

int size = 5;
SQLiteStatement statement = myDB.compileStatement("insert into " + TABLE + " values(?, ?, ?, ?, ?, ?)");
        String data[];
        String line = null;
        int size = 5;
//...
//some code    
//...
myDB.beginTransaction();


    while((line = bufferedReader.readLine()) != null) {
        data = line.replaceAll("'", "''").split(",", -1);

        statement.clearBindings();
        for(int i = 0; i < size; i++) {
            statement.bindString(i + 1, data[i]);
        }
        statement.bindString(size + 1, deadline);
        statement.executeInsert();
    }

    myDB.setTransactionSuccessful();    
    myDB.endTransaction();

只是为了澄清,我不想删除我的数据库,因为我想保留我数据库中的所有其他表,这就是为什么我要问是否可以导入(和替换)只有一个表进入包含其他表的数据库。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但你必须谨慎使用。

您可以在删除旧数据库文件后下载该文件并将其粘贴到数据库文件夹中。使用Android上下文获取库的文件路径而不是硬编码。

您必须小心谨慎,因为用于创建数据库的sqlite版本以及设备使用的版本可能不同。

如果您还没有这样做,我建议的另一种方法是使用您自己的交易。在开始插入之前启动事务,并在插入行后关闭事务。它可能很慢的一个原因是因为Android通过为每个插入启动一个事务来插入,但如果你自己这样做就不会这样做。

如果您采用第二种方法,

beginTransaction和endTransaction是您在SQLiteDatabase上寻找的方法。

编辑:

如果您不想删除整个数据库,我建议采用第二种交易方式。