java - 可扩展 ListView 的烦人 SQLite 查询问题

标签 java android sqlite

我的一个应用程序遇到了一个非常烦人的问题。当我发布带有应用程序和数据库增量版本的更新时。

触发更新,删除旧数据库并引入新数据库。以下是更新代码

    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/

相关文章:

java - maven 插件别名是如何映射的

java - 图像旋转后使用 DrawImage() 显示整个图像

Android 浏览器将宽度设置为 100%,而不管应用于元素的边距(即 block 引号)

android - 使用React-Native-Google-Signin在React Native中使用play-services-auth依赖项

python - 方镁石。插入后如何获取自动增量主键的值,除了last_insert_rowid()?

java - 如何优化 Held-Karp 算法的 java 实现以缩短运行时间?

java - 我想将Java中的字节数据转换为C

java - Android WebView Word Wrapping 捏缩放文本内容

android - 使用 AES 解密 SQLite 数据库

django - 导入错误 : No module named '_sqlite3' in python3. 3