我的一个应用程序遇到了一个非常烦人的问题。当我发布带有应用程序和数据库增量版本的更新时。
触发更新,删除旧数据库并引入新数据库。以下是更新代码
db.execSQL("DROP TABLE IF EXISTS table");
db.execSQL("DROP TABLE IF EXISTS android_metadata");
try {
InputStream is = getAssets().open("sqlfile");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while(line != null){
db.execSQL(line);
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
当您单击一个国家/地区时,就会出现可展开的菜单,它将列出该国家/地区的所有行。问题是在以前的版本中这工作正常。但是更新后,这将根本不起作用,但其他所有查询都可以正常工作。以下是相关查询。
protected Cursor getChildrenCursor(Cursor groupCursor) {
String countryID = Integer.toString(groupCursor.getInt(groupCursor.getColumnIndex("_id")));
SQLiteDatabase checkDB = null;
checkDB = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READONLY);
Cursor value = checkDB.rawQuery("SELECT * FROM countries WHERE open='1' AND country=?", new String[]{countryID});
//checkDB.close();
return value;
}
最佳答案
在onUpdate中,将数据库数据备份到临时表中,然后删除表,并创建新表。最后,复制回旧数据。
更新:
您还可以通过打开的游标将数据备份到java变量,并在创建新数据库时将它们转储回来
关于java - 可扩展 ListView 的烦人 SQLite 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8673390/