0

こんにちは、sqliteヘルパークラスを使用していますが、selectステートメントの使用に少し問題があります。日付ベースアイテムのIDをその名前で取得したい。

私はこの選択方法を使用します:

public Cursor selectShift (String name){
    SQLiteDatabase db = dbHandler.getReadableDatabase();
    Cursor c = db.query(TABLE_NAME, null, "name=" + name, null, null, null, null);
    c.moveToFirst();
    db.close();
    return c;
}

そして、私がこれを呼ぶとき、私はこれを使います:

if(handler.selectShift(name)!=null){
      Cursor c = handler.selectShift(name);
      id = c.getInt(c.getColumnIndex("_id"));
      c.close();      
  }

そして、このエラーが発生します:

android.database.CursorIndexOutOfBoundsException:インデックス0が要求され、サイズは0です

存在しないかのように、名前の文字列が正しいことを確認しました。リストビューに名前を表示すると、その名前が表示されるので、存在します。

誰かがこれを修正する方法を教えてもらえますか?

4

4 に答える 4

2

1-カーソル内にデータがあるかどうかを確認する必要があります......c.getCount>0またはc.moveToFirst()またはc.isAfterLast().......。

if(handler.selectShift(name)!=null){
      Cursor c = handler.selectShift(name);

if (c.moveToFirst()){ //<--------------
   do{  //<---------if you not need the loop you can remove that
       id = c.getInt(c.getColumnIndex("_id"));
   }while(cursor.moveToNext());
}



  c.close();      

}

<variable>2-わからないが、selectクエリで' 'が変数のあるwhere句にないように見える

"SELECT COUNT(*) FROM " + tableName + " WHERE " + commentFieldName + " = '" + comment + "'"; 

またbetter to use parametrized statement

String query = "SELECT COUNT(*) FROM " + tableName + " WHERE columnName = ?";
cursor = db.rawQuery(query, new Sring[] {comment});
于 2012-06-24T12:00:37.100 に答える
0

問題はここにあるようです

"name="  <-It should be "name = "+name

以下はうまくいくはずです

Cursor cursor= db.query(TABLE_IMAGES,null, "name" +" = ?", new String[]{name},  null, null, null);
于 2012-06-24T12:12:33.217 に答える
0

名前変数がSQL用にすでにフォーマットされていない(またはTEXTではない)場合を除いて、少し引用符が必要だと思います。多分このようなもの

Cursor c = db.query(TABLE_NAME, null, "name= \'" + name + "\'", null, null, null, null);
于 2012-06-24T12:46:26.280 に答える
0

あなたの助けをありがとう、私は問題を見つけました。それはカーソルメソッドにありました、解決策は次のとおりです:

public Cursor selectShift (String name){
    SQLiteDatabase db = dbHandler.getReadableDatabase();
    Cursor c = db.query(TABLE_NAME, new String[] {"_id"}, "name LIKE '"+name+"%'", null, null, null, null);
    c.moveToFirst();
    db.close();
    return c;
}
于 2012-06-24T13:21:29.727 に答える