来自sql查询的多个数据库操作

时间:2012-04-29 11:03:34

标签: android

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

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

那么,我该怎么做我的数据库实例?如何替换到DB和fromDB?

2 个答案:

答案 0 :(得分:2)

从未尝试过,但应该这样:

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

答案 1 :(得分: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();
            }
        }
    }