3

データベースのインスタンスが2つあり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 に答える