2011-08-31 181 views
3

我在我的Android应用程序中遇到SQLIte数据库的一些麻烦。 问题在于数据库永远不会更新,即使在多次重新启动模拟器,Eclipse或从DDMS删除后也不会更新。Android不更新SQLite数据库

这是我的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

+0

@MrZander:我刚刚编辑了代码,它只是一个错字 – Tilvia

回答

6

你有两个选择:

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

您可能想要选项1.如果您的应用程序的用户需要更新其数据库,则选项2会更好。

+0

即使我从DDMS中删除数据库文件,问题仍然存在,就好像onCreate没有再次运行一样。提到数据库正在保存在一个(虚拟)外部存储器中 – Tilvia

+0

当你删除数据库时,它是否被重新创建?如果是这样,你应该试着用调试器通过onCreate来看看发生了什么 – elevine

+0

解决了它(在最不显然)通过重新创建整个模拟器,并在getWritableDatabase而不是在onCreate之后移动原始查询,但不知道发生了什么。 – Tilvia