在sqlite android中搜索匹配

时间:2017-08-23 18:22:36

标签: android android-sqlite

我创建了一个包含id,name和birthday的表。我想调用一个带有名称的函数,并搜索包含相同名称的任何行。

public StatsitcsHelper GetDateInfo(String name) {
    StatsitcsHelper statsitcsHelper = new StatsitcsHelper ();
    SQLiteDatabase db = this.getWritableDatabase ();
    Cursor cursor = db.rawQuery ("select nameC from " + TABLE_PROGGRES +
            " WHERE = ?", new String[] {name}, null);


    cursor.moveToFirst ();
    if (cursor != null && cursor.getCount () > 0 && !cursor.isAfterLast ()) {
        // i want the name of the user here
        statsitcsHelper.mID = Integer.parseInt (cursor.getString (cursor.getColumnIndex ("PID")));
        statsitcsHelper.mName = cursor.getString (cursor.getColumnIndex ("nameC"));
        statsitcsHelper.mbirthday = Integer.parseInt (cursor.getString (cursor.getColumnIndex ("birthdayC")));
        cursor.moveToNext ();
    }
    db.close ();
    cursor.close ();
    return statsitcsHelper;

}

并且这样称呼它。

databaseHelper.GetDateInfo("Jhon");

问题是值继续作为零返回。

我一直收到这个错误。

 java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it

我相信它最好考虑检查我只是指定Textview来显示whatisnde StatsitcsHelper

 NAME_Text.setText(statsitcsHelper.mName);

显示零

3 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。首先,您需要对SQL查询进行一处小改动:

Cursor cursor = db.query ("select nameC from " + TABLE_PROGGRES +
    " WHERE nameC = ?", new String[] {name}, null);

您必须在WHERE子句中指定要比较的列。 SELECT子句仅确定返回哪些列。 WHERE子句不会自动使用SELECT中指定的列,因为您可以与所需的任何列进行比较,即使它们未被返回。

其次,在使用之前,您应该检查cursor是否为null。这意味着您应该执行类似

的操作
if (cursor != null) {
    cursor.moveToFirst();

    // ...
}

接下来,在关闭整个数据库之前应关闭游标:

cursor.close ();
db.close ();

最后一点,我相信你的意思是StatisticsHelper

答案 1 :(得分:1)

我发现我需要让Cursor像这样:

Cursor cursor = db.rawQuery ("select * from " + TABLE_PROGGRES +
        " WHERE nameC  = ?", new String[] {name}, null);

因为在if语句中我继续为值分配列,我需要用光标选择它们。

答案 2 :(得分:1)

而不是rawQuery,您也可以使用辅助方法:

db.query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

在你的情况下,它将是

db.query("TABLE_PROGGRES",new String[]{"id_column","nameC","birthday_column"},"nameC",new String[]{name},null,null,null);

您可能希望将TABLE_PROGGRES重命名为TABLE_PROGRESS