java - android sqlite查询搜索出现 "LIKE"错误

标签 java android database android-sqlite

在过去的几个小时里我一直被困在这个问题上(遗憾的是)。

我正在使用 SQLite 构建一个应用程序,该应用程序可以执行所有灵活的 SQL 命令。我目前陷入了如何从 ID 以外的列进行查询的困境。

我从表的第二列检索信息的代码如下所示:

      public String nameSearch(String n) {
    String[] columns = { KEY_ID, KEY_NAME, KEY_DESCRIPTION };
    Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + "LIKE '%"+n+"%'", null, null, null, null, null);
    while(c != null){
        c.moveToFirst();
        String data = c.getString(1);
        return data;
    }
    return null;
}

我在 onClick 命令上的代码,它位于一个单独的类中来解释上下文:

        case R.id.nameSearchButton:
        String n = etName.getText().toString();
        try {
            SQLControls controller = new SQLControls(this);
            controller.nameSearch(n);
            String gotName = controller.nameSearch(n).toString();
            controller.close();
            tvName.setText(gotName);
            Log.d(TAG, " got " + gotName);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, " error at " + e);
        }
        break;

我知道这或多或少相当简单,但我认为有一件事我没有做或没有看到,这让我很沮丧。有关其他信息,每当您点击按钮时都会显示 logCat 信息:

04-16 23:49:14.616: W/KeyCharacterMap(596): No keyboard for id 0
04-16 23:49:14.616: W/KeyCharacterMap(596): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
04-16 23:49:17.680: W/System.err(596): java.lang.NullPointerException
04-16 23:49:17.685: W/System.err(596):  at com.example.sqltest.SQLControls.nameSearch(SQLControls.java:175)
04-16 23:49:17.685: W/System.err(596):  at com.example.sqltest.CustomSearch.onClick(CustomSearch.java:72)
04-16 23:49:17.685: W/System.err(596):  at android.view.View.performClick(View.java:2485)
04-16 23:49:17.685: W/System.err(596):  at android.view.View$PerformClick.run(View.java:9080)
04-16 23:49:17.685: W/System.err(596):  at android.os.Handler.handleCallback(Handler.java:587)
04-16 23:49:17.685: W/System.err(596):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-16 23:49:17.685: W/System.err(596):  at android.os.Looper.loop(Looper.java:130)
04-16 23:49:17.685: W/System.err(596):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-16 23:49:17.685: W/System.err(596):  at java.lang.reflect.Method.invokeNative(Native Method)
04-16 23:49:17.685: W/System.err(596):  at java.lang.reflect.Method.invoke(Method.java:507)
04-16 23:49:17.685: W/System.err(596):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-16 23:49:17.685: W/System.err(596):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-16 23:49:17.685: W/System.err(596):  at dalvik.system.NativeStart.main(Native Method)
04-16 23:49:17.685: E/Custom Search(596):  error at java.lang.NullPointerException

非常感谢您的帮助。到目前为止,每个回答过我问题的人都给了我很大的帮助,即使是对于如此简单和微小的事情。

最佳答案

你在LIKE之前错过了一个空格,并且c永远不会为空,你必须检查c.moveToFirst是否为true

Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + " LIKE '%"+n+"%'", null, null, null, null, null);
if (c.moveToFirst())
{
    String data = c.getString(1);
    return data;
}

关于java - android sqlite查询搜索出现 "LIKE"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16053441/

相关文章:

android - 可能的动态 SSL 证书固定?

java - 从页面的无元素部分提取文本

java - 在android中创建一个空的ArrayList

java - NamedParameterJdbctemplate 的获取大小?

android - 使Flutter中的重复列表值变为DISTINCT

Android 关闭屏幕

database - 将 pk 或 id 保存到 django View 后将任务传递给任务后,celery 任务无法打开模型实例

mysql - 如何在同一个Hibernate事务中保存两个数据库记录?

mysql - 两个游标在mysql中不起作用

java - joda time to Date 不一致的时区