2016-07-01 1 views
1

アンドロイドのsqliteでMAX関数を使用することはできません。私は以下のようにdbhandlerクラスで最高の機能を内蔵し

@Override 
public int getIDmax() { 
    int MAX =0; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    try{ 
     String QUERY = "SELECT MAX(KEY_MESSAGE_ID) AS KEY_MESSAGE_ID FROM "+TABLE_NAME ; 
     Cursor cursor = db.rawQuery(QUERY,null); 
     MAX =cursor.getColumnIndex(KEY_MESSAGE_ID); 
     db.close(); 
     return MAX; 

    }catch (Exception e){ 
     Log.e("error",e+""); 
    } 
    return 0; 
} 

は、今私はKEY_MESSAGE_ID列に最大数を取得したい 主な活動における私のコードは以下の通りです:

int b = handler.getIDmax(); 
      Toast.makeText(getApplicationContext(),""+b,Toast.LENGTH_LONG).show(); 

しかし、アプリケーションを実行すると、0が返されます。 何が問題ですか?

+0

そう?それは働いているかどうか? – AxelH

答えて

2

値を回復するのに間違いました。 値ではなく、列のインデックスを取得しています。

あなたが(このクエリで安全)

PS getIndexColumnを使用するか、このインデックスをハードコーディングすることができます

cursor.getInt(indexColumn)

を呼び出して、値を取得するには:I最初のカーソルの位置がわからないので、私は確信する位置を設定します

cursor.moveToFirst()

編集:ここで私はそれを行うだろうかです(テストしていません)

@Override 
public int getIDmax() { 
    int MAX = -1; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    try{ 
     String QUERY = "SELECT MAX(_message_id) FROM "+TABLE_NAME ; 
     Cursor cursor = db.rawQuery(QUERY,null); 
     cursor.moveToFirst(); //Set the position to the beginning, current position is -1. You can check if there is something in the cursor since this return a boolean 
     MAX = cursor.getInt(0); 

     db.close(); 
    }catch (Exception e){ 
     Log.e("error",e+""); 
    } 
    return MAX; 
} 
+0

PS:間違いがある場合は-1を返し、そうでない場合はエラーを検出できません。 – AxelH

+0

私は以下のようにgetIDmax()を変更しました: –

+0

私は答えを編集しましたが、これはテストできませんが、これはうまくいくはずです。受け取ったカーソルが-1行を指していることを知る必要があります。最初に位置を設定するか、moveToNextを使用してこの位置インデックスを増やす必要があります。 – AxelH

関連する問題