java - SQLite SELECT 在 Android API 21 中不再起作用,但在 18 中起作用

标签 java android sqlite android-5.0-lollipop

我编写了一个应用程序来访问外部存储上的 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/

相关文章:

java - JSF Trinidad selectOneChoice UI 组件

android - 超时定位

java - JPA+SQLite问题

java - 删除Java错误中的空格

java - 链表 vector

java - Java类源文件可以从Matlab中引用吗?

mysql - 为什么 Rails 在使用不同的数据库时返回不同的浮点值?

android - 如何在android中可见/不可见的启动器图标?

android imageview 需要额外的黑色空间

SQL:如果不存在如何更新或插入?