在android中重命名SQL数据库

时间:2011-04-05 11:20:55

标签: android sql sqlite

当引用数据库表时,我通常使用如下语法: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;");

        }

注意:我已将此代码删除,以便它适合我的问题

2 个答案:

答案 0 :(得分:0)

在开始任何类型的交易之前,您需要致电db.execSQL("ATTACH 'hq_db' AS hq_db;");。先做附件,然后开始交易。

您是否在尝试附加其他数据库之前调用beginTransaction或执行开始事务的SQL?

答案 1 :(得分:0)

您可能正在使用AutoCommit = 0创建数据库。这会使您进入事务,因此在每次INSERT之后都不需要写入数据库文件。但它也意味着你无法访问另一个数据库。创建数据库,设置AutoCommit = 1,ATTACH,然后设置AutoCommit = 0。