7

データベースの特定の行からテキストを取得しようとしています。このために、私はこの機能を作りました

public String getTranslation(long rowId) throws SQLException {    
    String str = null;
    Cursor mCursor = db.query(
        true, TABLE_LANGUAGE_FR, new String[] {
            KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK
        }, 
        KEY_FORM_LABEL_ID + "=" + rowId, null, null, null, null, null
    );

    if (mCursor != null) {
        mCursor.moveToFirst();
        str = mCursor.getString(mCursor.getColumnIndex(KEY_ITEM_NAME));
    }
    return str;
}

そして、私はそれを次のように呼びます:

db = new DbAdapter(this);
db.createDatabase(); 
db.openDataBase();
String str = db.getTranslation(1706);

私のテーブルは次のようになります。

ここに画像の説明を入力

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

09:32:08.965    307 com.Orange  ERROR   AndroidRuntime  Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
09:32:08.965    307 com.Orange  ERROR   AndroidRuntime      at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
09:32:08.965    307 com.Orange  ERROR   AndroidRuntime      at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
09:32:08.965    307 com.Orange  ERROR   AndroidRuntime      at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
09:32:08.965    307 com.Orange  ERROR   AndroidRuntime      at com.Orange.Database.DbAdapter.getTranslation(DbAdapter.java:141)
09:32:08.965    307 com.Orange  ERROR   AndroidRuntime      at com.Orange.Authentication.onCreate(Authentication.java:32)

このエラーが発生するのはなぜですか? ここで何が間違っていますか?

前もって感謝します。

4

3 に答える 3

25

空のカーソルがあるように見えます。null かどうかを確認する代わりに、checkcing を試してください

if(mCursor.getCount() > 0)
{
  //do stuff
}

selectステートメントを実行するときに実際にデータを取得できるように、where条件を削除してみてください。それでも何も得られない場合は、テーブル名にタイプミスがあるか、データベース/テーブルの接続/作成に失敗した可能性があります。

Cursor mCursor = db.query("sys_interface_text", new String[] {
       "id_interface_text", "item_name","form_label_id", "form_rank"}, 
               "form_label_id = 1706", null, null, null,
       null);
于 2012-06-29T07:08:41.500 に答える
1

使ってみて

while(cursor.moveToNext())
{
   if(cursor.isFirst())
   {
      //Your code goes here in your case
      return mCursor.getString(mCursor.getColumnIndex(KEY_ITEM_NAME));
   }
}
finaly
{
 if(mCursor!= null)
 {
   mCursor.close();
 }
}
于 2012-06-29T08:26:15.770 に答える
0

この行を変更してみてください

Cursor mCursor = db.query(true, TABLE_LANGUAGE_FR, new String[] {
           KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK}, 
                   KEY_FORM_LABEL_ID + "=" + rowId, null, null, null,
           null, null);

Cursor mCursor = db.query(TABLE_LANGUAGE_FR, new String[] {
           KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK}, 
                   KEY_FORM_LABEL_ID + "=" + rowId, null, null, null,
           null);

また、if条件にこれを追加します

 return str;
于 2012-06-29T07:10:56.277 に答える