繁体   English   中英

将表导入现有的SQLite数据库

[英]import a table into an existing SQLite database

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

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

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

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

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

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

如果您还没有这样做,我建议的另一种方法是使用自己的事务。 在开始插入之前先开始事务,并在插入行后关闭事务。 之所以会变慢的一个原因是,Android会通过为每个插入启动事务来插入,但如果您自己进行则不会这样做。

如果您采用第二种方法,则beginTransaction和endTransaction是您要在SQLiteDatabase上寻找的方法。

编辑:

如果您不想删除整个数据库,建议使用第二种事务处理方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM