Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将表导入现有SQLite数据库_Android_Sqlite_Insert - Fatal编程技术网

Android 将表导入现有SQLite数据库

Android 将表导入现有SQLite数据库,android,sqlite,insert,Android,Sqlite,Insert,在我的应用程序中,在第一次启动时,我从网上下载了一个预填充的数据库。(相当快) 每x次,我需要更新数据库中的一个表。 我不需要旧的条目,所以我可以删除它们 以下是我的工作: 我删除了表中的所有内容。然后我从网上得到一个包含我的数据的csv文件,我用语句(优化)做了大量的插入。。。 但是,这需要几分钟(数千行) 所以,我想知道,既然我不需要旧的条目,那么删除表并从web导入新的条目怎么样?这样,我就可以避免插入,而且应该更快 可能吗 编辑: 这是我的代码,如果可以优化,请更正: int size

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

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

以下是我的工作: 我删除了表中的所有内容。然后我从网上得到一个包含我的数据的csv文件,我用语句(优化)做了大量的插入。。。 但是,这需要几分钟(数千行)

所以,我想知道,既然我不需要旧的条目,那么删除表并从web导入新的条目怎么样?这样,我就可以避免插入,而且应该更快

可能吗

编辑:

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

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();
int size=5;
SQLiteStatement=myDB.compileStatement(“插入到“+TABLE+”值(?,,,,,,,,?)”;
字符串数据[];
字符串行=null;
int size=5;
//...
//一些代码
//...
myDB.beginTransaction();
而((line=bufferedReader.readLine())!=null){
数据=行.replaceAll(“,”).split(“,”,-1);
语句。clearBindings();
对于(int i=0;i

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

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

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

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

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

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

编辑:


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

我从未尝试过使用SqliteStatement。因此,我不能像将SQLIteDatabase事务与您正在使用的SQLiteStatement混合在一起那样评论代码的正确性。SQLiteDatabase类还有一个insert方法和execute sql方法。这些是我在插入数据时使用的。这很奇怪。很难相信单笔交易比多笔交易花费的时间更长。检查这个链接,它几乎完成了我们上面讨论的所有内容,我看不出有什么不同。希望你能找到你花很长时间的原因。