在Android中附加内存数据库

时间:2012-10-11 14:35:50

标签: android sqlite

我在Android中创建了内存数据库。我把 null 放在SQLiteOpenHelper构造函数的 name 参数中:

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命令也能很好地运行。 但是当我尝试访问内存数据库中的表时,它们不存在。我得到例外。 E.g:

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

是否可以将内存数据库附加到磁盘上的数据库?这样做的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

每个与内存数据库的新连接都会创建一个新的空数据库。 因此,您的ATTACH命令附加到不同的数据库。

您应该使用ATTACH命令,然后通过mainDB数据库中的temp_db连接创建表格;例如CREATE TABLE temp_db.doc_orders_products(...

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