重置或刷新数据库连接

时间:2010-06-13 18:54:16

标签: android sqlite database-connection

使用备份替换数据库文件后,

This Android application on Google使用以下方法刷新数据库:

public void resetDbConnection() { 
    this.cleanup(); 
    this.db = 
        SQLiteDatabase.openDatabase(
           "/data/data/com.totsp.bookworm/databases/bookworm.db",
            null, SQLiteDatabase.OPEN_READWRITE); 
} 

我没有构建这个应用程序,我不确定会发生什么。 我试图让这个想法在我自己的应用程序中工作,但数据似乎被视图缓存,并且应用程序继续显示已替换的数据库中的数据,即使在我调用cleanup()并重新打开数据库之后。我必须终止并重新启动活动才能看到新数据。

我试图在我的TabHost视图上调用 invalidate ,它几乎包含所有内容。我认为视图会重绘并刷新其基础数据,但这也没有预期的结果。

我最终以编程方式重新启动活动,这有效,但这似乎是一个极端的措施。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

至少在概念上与Pentium10达成一致。

应用程序正在使用Cursor来显示其数据。 Android中的Cursor类似于ODBC中的客户端游标,因为它是查询结果集所代表的所有数据的缓存副本。

现在,处理数据库内容更改的常规方法是在requery()上调用Cursor。这将通过CursorAdapter附加ListViews或其他AdapterViews来改变其变化。

在您的情况下,我不完全确定它会起作用,因为您正在关闭,替换和重新打开数据库。这不应该在数据AFAIK上打开Cursor。因此,在您的情况下,您需要关闭Cursor,执行数据库随机播放,然后再次运行查询以在新数据库上获得新的Cursor