我有两个SQLiteDatabase
数据库实例。我需要将数据从一个复制到另一个。我需要执行这个查询:
INSERT INTO `toDB`.`tableName` SELECT * FROM `fromDB`.`tableName`
那么,我怎样才能做到这一点我的数据库实例?如何替换 toDB 和 fromDB ?
我有两个SQLiteDatabase
数据库实例。我需要将数据从一个复制到另一个。我需要执行这个查询:
INSERT INTO `toDB`.`tableName` SELECT * FROM `fromDB`.`tableName`
那么,我怎样才能做到这一点我的数据库实例?如何替换 toDB 和 fromDB ?
从未尝试过,但它应该以这种方式工作:
您必须在 SQLite 级别附加其他数据库,以便 sqlite 可以直接访问它。
例如,您打开应该是的数据库,toDB
然后发出以下命令(通过execSQL
)
ATTACH DATABASE '/data/data/your.package/databases/dbname.db' AS fromDB
您现在应该可以访问其他数据库并且可以执行
INSERT INTO main.tableName SELECT * FROM fromDbB.tableName
您最初打开的数据库自动具有名称“main”。
您可以并且应该通过Context#getDatabasePath获取数据库的路径,因为不能保证此路径在所有设备上都是相同的。
是的,您可以按以下方式执行此操作:
DatabaseHelper dbHelper = DatabaseHelper.create(CMOSApplication.getInstance()); SQLiteDatabase db = null; try { db = dbHelper.getWritableDatabase(); db.execSQL("attach database ? as oldDB", new String[] { CMOSApplication.getInstance().getDatabasePath("cmos_database").getPath() }); db.execSQL("insert into task select * from oldDB.task"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(db != null){ try { db.execSQL("detach oldDB"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }