当第一个查询使用只读数据库时,Android无法升级我的数据库

时间:2011-12-04 15:48:37

标签: android sqlite

所以我到目前为止依赖于onCreate数据库的自动(差不多)onUpgrade / SQLite方法。一切正常,我只需要更改数据库的版本号,让它自动运行onUpgrade

但是现在,我在尝试向我的数据库添加列并更改版本号时遇到了异常:

SQLiteException: Can't upgrade read-only database from version X to Y

查看我的代码,确定我的应用程序的第一个查询是SELECT查询,我正在使用getReadableDatabase打开与它的连接,因为请求不需要写访问。

所以我想知道,我该如何解决这个问题?我应该一直使用getWritableDatabase吗? (作为一种解决方法,可以使我的更新通过)当然,如果两种方法都存在,那是因为它们是要使用的,并且连接在需要时针对只读访问进行了优化?我不想失去这个好处。

3 个答案:

答案 0 :(得分:0)

我使用过的解决方法:在我的应用程序的“开始”处有一个只执行getWritableDatabase()并关闭它的方法,以便在必要时触发所有需要的创建/更新。

答案 1 :(得分:0)

在我的情况下,存在语法错误:其中一个字段是SQL保留字。 但要查看有关语法的错误消息,我必须添加

dbHelper.getWritableDatabase().close();

MainActivity.onCreate()

答案 2 :(得分:-1)

在创建语句期间,某些时间列名称会重复。

create table tbl (Col1 TEXT,Col2 INTEGER,Col3 INTEGER,Col1 INTEGER,Col5 INTEGER); 

像这里Col1重复两次......