从一个数据库到另一个数据库的Android Sqlite转移表

时间:2018-04-24 01:30:34

标签: android android-sqlite

我的Android应用程序中有一个要求。

现有的数据库A有一个表T.从应用程序的下一个版本开始,我想创建一个新的数据库B,并且 MOVE 我的表从A到B WITH 所有现有数据。

我猜这是从现有数据库中获取转储并将其存储在资产文件中的某种方式。然后使用该文件恢复新数据库中的表。

无法将该数据存储在内存中,因为如果应用程序被中断,它可能会进入不一致状态。

在花费一些时间在论坛/论坛上搜索后,我找不到任何定义明确的方法。

请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以使用sqlite的ATTACH命令来实现此目的。首先是指定第一个数据库的路径。

private static String FIRST_DB_PATH = context.getDatabasePath("Sample.sqlite").toString();

然后将它附加到secondDb

SQLiteDatabase secondDB = secondDBHandler.getWritableDatabase();
secondDB.execSQL("ATTACH DATABASE '" + FIRST_DB_PATH + "' AS tempDb");

然后执行插入查询。 注意:您将secondDB用作 main

secondDB.execSQL("INSERT INTO main." + SeconDB_table_name +  "SELECT * FROM tempDb."+ FirstDB_table_name );

然后最后分离第一个db

secondDB.execSQL("DETACH tempDb"); 

希望这有帮助

修改

执行此操作以删除表

secondDB.execSQL("DROP TABLE IF EXISTS main." + SeconDB_table_name);

好的以下是如何为secondDB创建一个表作为firstDb的副本

secondDB.execSQL("CREATE TABLE main." + SeconDB_table_name + " AS SELECT * FROM tempDb." + FirstDB_table_name);

如果您在评论中的意思是在将第一个表移到第二个表后删除第一个表,那么在取消之前将其删除

secondDB.execSQL("DROP TABLE IF EXISTS tempDb." + FirstDB_table_name);