2016-05-02 11 views
1

1つの値を1ずつインクリメントして保存したいコードが1つあります。他のすべての機能でやってみましたが、カーソルで何かを取得する、私はそれが私のSQLまたはコード上の何か、私は間違いを見つけることができないすべての上に見えるかわからない。Sq-lite Androidカーソルが特定の列で機能しない

すべて私が知っているparousies_maxはそれがcursor.getString前に持っていた値を保持していることですが、それはデータベースが今

TABLE_NAME2=Mathimata_table 
ID_MATHIMA:001 - ONOMA_MATHIMA:Pro1 - EXAMINO_MATHIMA:1 - PAROUSIES_MAX:0 - KLEIDI:4888 
のためにそれをチェックするために一つだけの入力で、このようなものです、通常は1

を取得

そして、私のコードはこれです:

final String SQL_EXAGOGH_PAROUSIES_MAX = final String SQL_EXAGOGH_PAROUSIES_MAX = 
"SELECT "+DatabaseHelper.Col_PAROUSIES_MAX+" 
FROM "+DatabaseHelper.TABLE_NAME2+" 
WHERE "+DatabaseHelper.Col_ID_MATHIMA+" = "+id_math; 
    SQLiteDatabase sqLiteDatabase=this.getReadableDatabase(); 
    Cursor cursor = sqLiteDatabase.rawQuery(SQL_EXAGOGH_PAROUSIES_MAX,null); 
    if (cursor.moveToFirst()) { 
     do { 
      parousies_max = cursor.getString(cursor.getColumnIndex("PAROUSIES_MAX")); 
     }while (cursor.moveToNext()); 
    } 
    cursor.close(); 
efedriko=Integer.parseInt(parousies_max); 
efedriko=efedriko+1; 
parousies_max=Integer.toString(efedriko); 

    SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("PAROUSIES_MAX",parousies_max); 
     contentValues.put(Col_KLEIDI,kleidi); 
     db.update(TABLE_NAME2, contentValues,"ID_MATHIMA = ?",new String[] {id_math}); 
+0

どういう意味ですか?この列ではどうなりますか? – varunkr

+0

何も、私はこのコードを実行するとき、私はちょうどparousies_maxにカーソルから戻って何も得られない通常parousies_maxは、0,1,2,3を返すカーソルを取得する必要がありますか何かデータベースが持っているが、最初に初期化されたので、データベースから何も取得されません – Fmetal

答えて

0

あなたはカーソルが列名を持つ任意の値を持っていないと述べたようDatabaseHelper.Col_PAROUSIES_MAX の場合は、一致するレコードがない場合にのみ発生します(つまり、 DatabaseHelper.Col_ID_MATHIMA+" = "+id_mathこの条件は満たされていません)がテーブル内に見つかったか、テーブル内にレコードがありません。

はので、私のsuggesstionは、変数id_mathの値をチェックし、それはあなたがテーブルのレコードを格納するようなフォーマットに一致するようにフォーマットされ

DatabaseHelper.Col_ID_MATHIMAが通り、textとしてdatatypeを持っている場合は、1つのより多くの事あなたが与えられているデータ(ID_MATHIMA:001)と、文字列として渡しているレコードを更新している間、その後、1つのレコードのみがされる場合ので、あなたの最後のクエリは、この

final String SQL_EXAGOGH_PAROUSIES_MAX = final String SQL_EXAGOGH_PAROUSIES_MAX = 
    "SELECT "+DatabaseHelper.Col_PAROUSIES_MAX+" 
    FROM "+DatabaseHelper.TABLE_NAME2+" 
    WHERE "+DatabaseHelper.Col_ID_MATHIMA+"='"+id_math+"'"; 

    SQLiteDatabase sqLiteDatabase=this.getReadableDatabase(); 
     Cursor cursor = sqLiteDatabase.rawQuery(SQL_EXAGOGH_PAROUSIES_MAX,null); 

//のようになりますid_mathの前後に引用符を使用しますthの結果クエリは、コードの下に使用し、whileループ

を削除している
   if(cursor != null) 
       { 
        if (cursor.moveToFirst()) { 
         parousies_max = cursor.getString(cursor.getColumnIndex("PAROUSIES_MAX")); 
        } 
        else{ 
        //also handle the case of no record found in here 
         //set as parousies_max ="0" ; 
        } 
       } 

複数のレコードは、このクエリの結果として存在する場合、ループはOKですが、あなたがするも、その場合には一方であるため///他にもう一度あなたのロジックに考えますあなたのロジックごとに常に最後のレコードを取得します。 これがあなたの必要であればwhileループもwhileコードを使用しないでください。

if(cursor != null){ 
    if (cursor.moveToLast()) { 
     parousies_max = cursor.getString(cursor.getColumnIndex("PAROUSIES_MAX")); 
    } 
    else{ 
      //also handle the case of no record found in here 
      //set as parousies_max ="0" ; or 

    } 
} 
cursor.close(); 
efedriko=Integer.parseInt(parousies_max); 
    efedriko=efedriko+1; 
    parousies_max=Integer.toString(efedriko); 

    SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("PAROUSIES_MAX",parousies_max); 
     contentValues.put(Col_KLEIDI,kleidi); 
     db.update(TABLE_NAME2, contentValues,"ID_MATHIMA = ?",new String[] {id_math}); 
関連する問題