2015-06-25 77 views
0

我被一个逻辑问题困住了。我有一个SQLite表的字段id,markerID(字符串)和分数(整数)。如果不存在,添加数据库条目

现在我想看看是否已经有某个标记ID的条目,如果不添加分数。如果存储的分数小于5,我不想做任何事情,如果没有,我想更新特定条目的分数。

现在我有问题,光标经过的所有条目,并添加一个条目,如果已​​经有与其他markerID一个条目,即使与目前markerID就应该什么都不做。因此,它为所有条目运行方法,并且对当前的标识ID不做任何处理,但为每个条目添加了一个Score与另一个标识ID。

我怎样才能做到我想要的?

if (cursor.moveToFirst()) { 
       do { 
        Log.d("Database", "Inhalt: "+cursor.getString(0) + cursor.getString(1)); 

        if (Integer.parseInt(cursor.getString(0)) < 5 && cursor.getString(1).equals(markerID)) { 
        Log.d("Database", "Update"); 
         dbh.updateScore(dbh, Integer.parseInt(cursor.getString(0)), markerID, score); 
         finish(); 
        } 
        else if (Integer.parseInt(cursor.getString(0))== 5 &&cursor.getString(1).equals(markerID)) { 
         Log.d("Database", "Nothing"); 
          finish(); 
         } 
        else if (!cursor.getString(1).equals(markerID)){ 
         Log.d("Database", "Add Score"); 
         dbh.addScore(dbh, score, markerID); 
         finish(); 
        } 
       } 
       while (cursor.moveToNext()); 
      } 
      else { 
       Log.d("Database", "Add Score"); 
       dbh.addScore(dbh, score, markerID); 
       finish(); 
      } 
      cursor.close(); 

下面是从数据库中getScore方法:

public Cursor getScore(DbHelper dbh) { 
    dbase = dbh.getReadableDatabase(); 
    String columns[] = {COLUMN_SCORE, COLUMN_MARKERID}; 
    Cursor cursor = dbase.query(SCORE_TABLE, columns, null, null, null, null, null); 
    return cursor; 
} 

回答

0

你并不需要经过所有条目,以检查是否有一个具有特定标记;只需询问数据库:

db = dbh.getWritableDatabase(); 
try { 
    long score = DatabaseUtils.longForQuery(db, 
       "SELECT Score FROM MyTable WHERE MarkerID = ?", 
       new String[]{ markerID }); 
    if (score < 0) { // not found? 
     ContentValues cv = new ContentValues(); 
     cv.put(COLUMN_MARKERID, markerID); 
     cv.put(COLUMN_SCORE, ...); 
     db.insertOrThrow(SCORE_TABLE, null, cv); 
    } else if (score < 5) { 
     // nothing 
    } else { 
     ContentValues cv = new ContentValues(); 
     cv.put(COLUMN_SCORE, ...); 
     db.update(SCORE_TABLE, cv, 
        "MarkerID = ?", new String[]{ markerID }); 
    } 
} finally { 
    db.close(); 
} 
相关问题