安卓无法更新SQLite数据库

4

我在我的Android应用程序中遇到了一些SQLite数据库的问题。

问题是,即使在模拟器多次重启、Eclipse重启或从DDMS删除后,数据库也从未被更新。

这是我的onCreate方法,位于一个扩展SQLiteOpenHelper类的类中:

public void onCreate(SQLiteDatabase database) {
    try {
        database.execSQL(ESSENCE_TABLE_CREATE);
        database.execSQL(PACCO_TABLE_CREATE);
        database.execSQL(TAVOLE_TABLE_CREATE);
        database.rawQuery("insert into essenza values(1, 'Rovere')",
                null); // added later
    } catch (SQLException e) {
        Log.e("DB", e.getMessage());
    }
}

实例化助手后,我请求获取数据库的引用:

    helper = new DBHelper(context, dbpath + "/" + DATABASE_NAME);
    database = helper.getWritableDatabase();

看起来rawQuery语句(在后来添加的)没有被执行,正在使用的数据库实际上是从先前版本缓存的。我也尝试更改数据库的版本,但无效。我是不是漏掉了什么?谢谢。


1
那段代码正确吗?你有一个开放引号。 - MrZander
1
这是因为数据库已经存在。如果您的逻辑是(如果(!dbExists){createDb} else {//什么也不做}},则将在新安装上执行此操作。 - mihail
@MrZander:我刚刚编辑了代码,只是一个打字错误。 - Tilvia
@mihail:我知道数据库存在的事实。对我来说不清楚的是为什么它从未被删除和重新创建。 - Tilvia
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

你有两个选项:

  1. 使用DDMs从设备中删除数据库文件(在/data/data/中查找)。这将强制Android再次运行onCreate。
  2. 在构造函数中,将传递给SQLiteOpenHelper的数据库版本递增。将您的原始查询添加到onUpgrade中。

你可能想选择第一个选项。如果您有想要更新其数据库的应用程序用户,则第二个选项更好。


即使我从DDMS中删除了数据库文件,问题仍然存在,就好像onCreate没有再次运行一样。我应该提到,数据库被保存在(虚拟)外部存储器中。 - Tilvia
当您删除数据库时,它是否会被重新创建?如果是这样,您应该尝试使用调试器逐步执行onCreate以查看发生了什么。 - Eric Levine
似乎解决了(至少表面上)通过重新创建整个模拟器并在getWritableDatabase之后移动原始查询而不是在onCreate中。虽然不知道发生了什么。 - Tilvia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,