3

我有两个SQLiteDatabase数据库实例。我需要将数据从一个复制到另一个。我需要执行这个查询:

INSERT INTO `toDB`.`tableName` SELECT * FROM `fromDB`.`tableName` 

那么,我怎样才能做到这一点我的数据库实例?如何替换 toDB 和 fromDB ?

4

2 回答 2

2

从未尝试过,但它应该以这种方式工作:

您必须在 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获取数据库的路径,因为不能保证此路径在所有设备上都是相同的。

于 2012-04-29T11:15:44.423 回答
0

是的,您可以按以下方式执行此操作:

    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();
            }
        }
    }
于 2014-09-26T01:31:12.097 回答