当引用数据库表时,我通常使用如下语法:my_database_name.my_table_name
我正在尝试在Android中执行相同操作,但我无法理解如何命名数据库。
您是否可以像在Sqlite3客户端中那样执行此SQL?即。
ATTACH "my_database_file" AS my_database_name;
以下是我在onCreate方法中尝试的内容:
db.execSQL("Attach 'hq_db' AS hq_db;");
但是我收到了这个错误:
04-05 11:13:35.676: ERROR/AndroidRuntime(860): Caused by: android.database.sqlite.SQLiteException: cannot ATTACH database within transaction: Attach 'hq_db' AS hq_db;
如何在事务之外的Android上执行SQL语句以使其工作?
编辑:使用超类构造器也可能有这样的东西,尽管超类构造函数字符串设置了文件名(它正常工作),它似乎没有别的:
private class databaseOpenHelper extends SQLiteOpenHelper {
public q_player_databaseOpenHelper() {
super(MyApp.getContext(), "my_db_file", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("Attach 'my_db_file' AS my_db_name;");
db.execSQL("PRAGMA foreign_keys=ON;");
}
注意:我已将此代码删除,以便它适合我的问题
答案 0 :(得分:0)
在开始任何类型的交易之前,您需要致电db.execSQL("ATTACH 'hq_db' AS hq_db;");
。先做附件,然后开始交易。
您是否在尝试附加其他数据库之前调用beginTransaction
或执行开始事务的SQL?
答案 1 :(得分:0)
您可能正在使用AutoCommit = 0创建数据库。这会使您进入事务,因此在每次INSERT之后都不需要写入数据库文件。但它也意味着你无法访问另一个数据库。创建数据库,设置AutoCommit = 1,ATTACH,然后设置AutoCommit = 0。