【问题标题】:How to search a specific string in database in sqlite如何在sqlite中搜索数据库中的特定字符串
【发布时间】:2012-08-31 14:53:38
【问题描述】:

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

这是我的搜索类代码:

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;
}

我的问题是什么?每次运行时,我都会不断逼近。

【问题讨论】:

  • 发布完整的异常堆栈。

标签: java android sqlite search


【解决方案1】:

由于您尚未发布 LogCat,我只能猜测,但您的 WHERE 子句看起来很可疑:

"DPRICE like ..."

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

DPRICE + " like ..."

我还有一些建议:

  • 使用selectionArgs参数防止SQL injection attacks
  • 考虑使用ListView and SimpleCursorAdapter 来显示您的数据。
  • 仅选择您正在使用的列。
  • 使用 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();
}

这里是tutorial,介绍如何使用带有自定义布局的 ListView 来显示来自数据库的信息。

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多