Android 将表导入现有SQLite数据库
在我的应用程序中,在第一次启动时,我从网上下载了一个预填充的数据库。(相当快) 每x次,我需要更新数据库中的一个表。 我不需要旧的条目,所以我可以删除它们 以下是我的工作: 我删除了表中的所有内容。然后我从网上得到一个包含我的数据的csv文件,我用语句(优化)做了大量的插入。。。 但是,这需要几分钟(数千行) 所以,我想知道,既然我不需要旧的条目,那么删除表并从web导入新的条目怎么样?这样,我就可以避免插入,而且应该更快 可能吗 编辑: 这是我的代码,如果可以优化,请更正:Android 将表导入现有SQLite数据库,android,sqlite,insert,Android,Sqlite,Insert,在我的应用程序中,在第一次启动时,我从网上下载了一个预填充的数据库。(相当快) 每x次,我需要更新数据库中的一个表。 我不需要旧的条目,所以我可以删除它们 以下是我的工作: 我删除了表中的所有内容。然后我从网上得到一个包含我的数据的csv文件,我用语句(优化)做了大量的插入。。。 但是,这需要几分钟(数千行) 所以,我想知道,既然我不需要旧的条目,那么删除表并从web导入新的条目怎么样?这样,我就可以避免插入,而且应该更快 可能吗 编辑: 这是我的代码,如果可以优化,请更正: int size
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方法。这些是我在插入数据时使用的。这很奇怪。很难相信单笔交易比多笔交易花费的时间更长。检查这个链接,它几乎完成了我们上面讨论的所有内容,我看不出有什么不同。希望你能找到你花很长时间的原因。