在sqlite android中搜索匹配项
我创建了一个包含id、姓名和生日的表。我想调用一个包含名称的函数,并搜索任何包含相同名称的行在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
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重命名为表_PROGRESSthank you@Code For Replay。使用我获取的查询无法解析方法“查询(java.lang.String,java.lang.String[],null))。我还附加了一个日志来检查if语句中的值,它从未被调用过,这让我感到奇怪why@AhmadMeer我的错误<代码>rawQuery()毕竟是正确的。我只是仔细检查了一下。@AhmadMeer请编辑您的问题以显示您正在检查的值。
SELECT*
查询所有列。如果需要,还可以指定特定列的列表,例如选择PID、nameC、birthdayC
。