0

データベースに次のようなクエリがあります。

Cursor c= ourDB.rawQuery("SELECT SUM(odometer) AS odometer FROM tripmileagetable WHERE car='abdul' AND date LIKE '2012-07%'", null);
        if(c.getCount()<=0){
            return 0;

        }else{

            int sum= c.getInt(0);
            Log.i("Sum of odometer", ""+sum);
            return sum;

        }

そしてそれは私にこの例外を与えます。これをelseセクションに書くと:

int sum= c.getColumnIndex("odometer");
            Log.i("Sum of odometer", ""+sum);
            return sum;

次に、これは0を返しますが、0を入力すると例外が発生し、自分の障害を見つけることができません。誰か助けてもらえますか?

4

4 に答える 4

3

c.moveToFirst();デフォルトではインデックス-1を指しているため、カーソルが例外を出しているのはそのためです。

于 2012-07-12T09:50:02.573 に答える
0

まず、カーソルに要素があるかどうかを確認して、最初のインデックスに移動する必要があります。この場合、データベースは結果を返しませんでした。

if (cursor.moveToFirst()) {
 int sum= c.getInt(0);
}
于 2012-07-12T09:49:49.390 に答える
0

いくつかの提案が便利です:

  1. カーソルで作業を開始する前に、カーソルがnullかどうかを確認します
  2. カーソルを最初のインデックスに移動します
  3. c.getInt(0);に言及する代わりに 、c.getInt(c.getColumnIndex( "FirstColumnName")));を使用します。

例えば:

if (cursor != null) {
    if (cur.moveToFirst()) {
        do {
            temp.add(cur.getString(cur.getColumnIndex("FirstColumnName"))); // "FirstColumnName" is the field name(column) of the Table                 
        } while (cur.moveToNext());
    }
}
于 2012-07-12T09:54:16.457 に答える
0

あなたはこれを試すことができます

cursor.moveToFirst();

while(cursor.moveToNext() )
{
   // YOUR CODE HERE
}
于 2012-07-12T10:03:34.357 に答える