データベースのインスタンスが2つありSQLiteDatabase
ます。そして、あるデータから別のデータにコピーする必要があります。このクエリを実行する必要があります:
INSERT INTO `toDB`.`tableName` SELECT * FROM `fromDB`.`tableName`
では、どうすればこれをデータベースインスタンスで実行できますか?toDBとfromDBを置き換える方法は?
データベースのインスタンスが2つあり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(); } } }