0

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

并且每 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();

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

4

1 回答 1

0

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

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

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

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

如果您遵循第二种方法,beginTransaction 和 endTransaction 是您在 SQLiteDatabase 上寻找的方法。

编辑:

如果您不想删除整个数据库,我会推荐事务的第二种方法。

于 2013-11-05T20:27:33.323 回答