2016-05-02 18 views
1

我有一個代碼,我想導出一個值增加一個並將其存儲回來,我嘗試了我在其他功能中的做法,但爲此我不用光標取回某些東西,我不知道它是我的SQL還是代碼中的東西,對我來說一切看起來都很好,但找不到錯誤。Sq-lite Android遊標無法在特定列中工作

所有我知道的是,parousies_max保持它有cursor.getString前值,但它通常得到+1

數據庫是這樣的,只有一個輸入端,查看它現在

TABLE_NAME2=Mathimata_table 
ID_MATHIMA:001 - ONOMA_MATHIMA:Pro1 - EXAMINO_MATHIMA:1 - PAROUSIES_MAX:0 - KLEIDI:4888 

而且我的代碼是這樣的:

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這種情況並不令人滿意)在表中找到或沒有記錄。

所以我的寶貴意見是檢查變量id_math的價值和格式化它,所以它會匹配爲你存儲在表中的記錄格式,

一兩件事,如果DatabaseHelper.Col_ID_MATHIMA是有datatypetext,按你給(ID_MATHIMA:001),並同時更新記錄,你是合格的字符串,然後用引號之前和之後id_math所以你最終的查詢會是這樣

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); 

//如果只有一個記錄將是數據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" ; 
        } 
       } 

///否則再想想你的邏輯,因爲如果多個記錄在那裏爲這個查詢然後結局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}); 
相關問題