在sqlite android中搜索匹配项

在sqlite android中搜索匹配项,android,android-sqlite,Android,Android Sqlite,我创建了一个包含id、姓名和生日的表。我想调用一个包含名称的函数,并搜索任何包含相同名称的行 public StatsitcsHelper GetDateInfo(String name) { StatsitcsHelper statsitcsHelper = new StatsitcsHelper (); SQLiteDatabase db = this.getWritableDatabase (); Cursor cursor = db.rawQuery ("sele

我创建了一个包含id、姓名和生日的表。我想调用一个包含名称的函数,并搜索任何包含相同名称的行

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
<>我相信它会考虑检查,我只是分配TeXVIEW来显示WestNo.DistStaysScRePEP/P>
 NAME_Text.setText(statsitcsHelper.mName);

它显示零

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

Cursor cursor = db.query ("select nameC from " + TABLE_PROGGRES +
    " WHERE nameC = ?", new String[] {name}, null);
必须在WHERE子句中指定要比较的列。SELECT子句仅确定返回哪些列。WHERE子句不会自动使用SELECT中指定的列,因为您可以与所需的任何列进行比较,即使这些列没有返回

其次,在使用它之前,您应该检查
光标
是否为
null
。这意味着你应该做类似的事情

if (cursor != null) {
    cursor.moveToFirst();

    // ...
}
接下来,应在关闭整个数据库之前关闭光标:

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

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

我发现我需要让光标如下所示:

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

因为在if语句中,我一直将列分配给值,我需要用光标选择它们。

也可以使用辅助方法代替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);

您可能希望将表_PROGGRES重命名为表_PROGRESS

thank you@Code For Replay。使用我获取的查询无法解析方法“查询(java.lang.String,java.lang.String[],null))。我还附加了一个日志来检查if语句中的值,它从未被调用过,这让我感到奇怪why@AhmadMeer我的错误<代码>rawQuery()毕竟是正确的。我只是仔细检查了一下。@AhmadMeer请编辑您的问题以显示您正在检查的值。
SELECT*
查询所有列。如果需要,还可以指定特定列的列表,例如
选择PID、nameC、birthdayC