Sq-lite Android Cursor在特定列中不起作用

时间:2016-05-02 23:54:15

标签: android sql sqlite cursor

我有一个代码,我希望将一个值增量输出一个并将其存储回来,我尝试了我在其他所有功能中的方式但是为此我没有用光标返回一些东西,我不知道知道这是我的SQL还是代码上的东西,一切看起来都不错,找不到错误。

我所知道的是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});

1 个答案:

答案 0 :(得分:0)

正如你所说光标没有列名DatabaseHelper.Col_PAROUSIES_MAX的任何值 只有在表中找不到匹配的记录(即DatabaseHelper.Col_ID_MATHIMA+" = "+id_math这个条件不满意)或表中没有记录时才会发生这种情况。

所以我的建议是检查变量id_math的值并对其进行格式化,以便它与您在表中存储记录时的格式相匹配,

根据您提供的数据(DatabaseHelper.Col_ID_MATHIMA),datatype textID_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);  

//如果只有一条记录将成为此查询的结果,则使用下面的代码并删除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});