我编写了一个应用程序来访问外部存储上的 SQLite 数据库。该应用程序在我的 Nexus 4 和模拟器上与 Android 4.4 运行良好。自从我将手机升级到 Android 5 后,它不再显示 SQLite 数据库中的任何数据。 API 21 上的模拟器也没有显示任何数据。
没有抛出任何错误或异常。 API 21 上的数据库游标完全是空的。
数据库打开方式如下:
String path = myContext.getExternalFilesDir(null).getAbsolutePath() + File.separator + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
查询的执行方式如下:
Cursor cur = myDataBase.rawQuery("SELECT * FROM employee WHERE employee match ? " +
"ORDER BY firstname, lastname LIMIT 100",
new String[] { "*" + queryString+ "*" });
while (cur.moveToNext()) {
persons.add(getPerson(cur)); // never reaches this since API 21
}
cur.close();
从 18 到 21 发生了什么变化?
完整的源代码可以在这里找到:https://github.com/sebastianhaeni/Contacts
最佳答案
Android 5 中的 SQLite MATCH 的工作方式与 Android <= 4.4 中的工作方式不同
在 5.0 之前,前缀“*”被简单地忽略。从 5.0 开始,它搜索以“*”开头的字符串。通配符只能用作后缀。
关于java - SQLite SELECT 在 Android API 21 中不再起作用,但在 18 中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106275/