Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在sqlite中搜索数据库中的特定字符串_Java_Android_Sqlite_Search - Fatal编程技术网

Java 如何在sqlite中搜索数据库中的特定字符串

Java 如何在sqlite中搜索数据库中的特定字符串,java,android,sqlite,search,Java,Android,Sqlite,Search,我想搜索数据库中存在的特定关键字并显示出来 以下是我的搜索类代码: String s = kw.getText().toString(); sqlhandler show = new sqlhandler(this); show.open(); String rname = show.getName(s); show.close(); tv.setText(rname); 下面是我的数据库类: public String getName(String kw) { String[]

我想搜索数据库中存在的特定关键字并显示出来

以下是我的搜索类代码:

String s = kw.getText().toString();

sqlhandler show = new sqlhandler(this);
show.open();
String rname = show.getName(s);
show.close();
tv.setText(rname);
下面是我的数据库类:

public String getName(String kw) {

    String[] columns = new String[] {NAME, APRICE, DPRICE, VENDOR, KEYWORD };

    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "DPRICE like " + "'%"+ kw+"%'", null, null, null, null);

    String sresult = "";

    int iname = c.getColumnIndex(NAME);
    int iap = c.getColumnIndex(APRICE);
    int idp = c.getColumnIndex(DPRICE);
    int ivendor = c.getColumnIndex(VENDOR);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        sresult = sresult + c.getString(iname)+ " "+c.getString(iap)
            + "  " + c.getString(idp) + "  " + c.getString(ivendor)
        + "\n";
    }

    return sresult;
}

我这里有什么问题?每次运行force时,我都会将其关闭。

由于您没有发布日志,我只能猜测,但您的WHERE子句看起来很可疑:

"DPRICE like ..."
我假设
DPRICE
是一个变量,而不是实际的列名:

DPRICE + " like ..."

我还有几点建议:

  • 使用
    selectionArgs
    参数来防止
  • 考虑使用一个图标来显示您的数据
  • 仅选择您正在使用的列
  • 使用while循环而不是for循环来迭代光标(for循环所做的工作是所需工作的三倍)
总而言之:

public String getName(String kw) {
    String[] columns = new String[] {NAME, APRICE, DPRICE, VENDOR};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, DPRICE + " like ?", new String[] {"'%" + kw + "%'"}, null, null, null, null);

    int iname = c.getColumnIndex(NAME);
    int iap = c.getColumnIndex(APRICE);
    int idp = c.getColumnIndex(DPRICE);
    int ivendor = c.getColumnIndex(VENDOR);

    // moveToNext() returns true when there is more data to read 
    //     or false when the cursor isAfterLast()
    StringBuilder builder = new StringBuilder();
    while (c.moveToNext()) {
        builder.append(c.getString(iname).append(" ")
               .append(c.getString(iap).append("  ")
               .append(c.getString(idp).append("  ")
               .append(c.getString(ivendor).append("\n");
    }

    return builder.toString();
}

下面介绍如何使用具有自定义布局的ListView来显示数据库中的信息。

发布完整异常堆栈。