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命令,然后通过mainDB连接在temp_db数据库中创建表;例如CREATE 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 回答