我创建了一个包含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);
显示零
答案 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