1

Androidでインメモリデータベースを作成しました。SQLiteOpenHelperコンストラクターのnameパラメーターにnullを入れました。

SQLiteOpenHelper(context, null, null, 1);

また、インメモリデータベースにいくつかのdoc_orders_productsテーブルを作成しました。

現在、このインメモリデータベースをメインのオンディスクデータベースに接続しようとしています。ATTACHコマンドで使用するインメモリデータベースの名前は何ですか?

私は試した:

mainDB.execSQL("ATTACH DATABASE ':memory:' AS temp_db");

mainDB.execSQL("ATTACH DATABASE '' AS temp_db");

インメモリデータベースがまったく作成されていない場合でも、両方のATTACHコマンドは適切に機能します。しかし、インメモリデータベースのテーブルにアクセスしようとすると、テーブルが存在しません。例外が発生します。例えば:

10-11 14:07:46.782: E/AndroidRuntime(2107): Caused by: 
android.database.sqlite.SQLiteException: no such table: 
temp_db.doc_orders_products (code 1): , while compiling: 
INSERT INTO temp_db.doc_orders_products SELECT * FROM 
main.doc_orders_products WHERE doc_id=3

インメモリデータベースをオンディスクデータベースに接続することは可能ですか?それを行う正しい方法は何ですか?

ありがとう。

4

2 に答える 2

1

インメモリデータベースへの新しい接続ごとに、新しい空のデータベースが作成されます。したがって、ATTACHコマンドは別のデータベースに接続されます。

コマンドを使用してから、接続を介してデータベースATTACHにテーブルを作成する必要があります。例:。mainDBtemp_dbCREATE TABLE temp_db.doc_orders_products(...

于 2012-10-11T16:47:21.040 に答える
0

正しい構文は

ATTACH DATABASE 'file::memory:' AS temp_db;

例:

sqlite> attach DATABASE 'file::memory:' AS temp_db;
sqlite> create table temp_db.t1 (_id integer);
sqlite> create table t1 (_id integer);
sqlite> insert into temp_db.t1 values(1);
sqlite> insert into t1 values(2);
sqlite> select temp.*, t1.* from temp_db.t1 as temp, t1;
1|2
于 2012-10-11T17:13:14.287 に答える