2015-06-25 69 views
0

我有一個包含3個字段的SQLite表:第一個是id(自動增量),第二個是markerID(字符串),第三個是score(整數)。檢查SQLite中是否存在某些內容

如果表中尚不存在活動的當前markerID,我想添加一個新行。

問題是,當光標經過條目並且已經有一個條目沒有當前的markerID時,它爲存儲在表格中的每個不同的標記ID添加一個新條目,即使它不應該是因爲當前markerID已經存在。

如何檢查markerID是否根本不存在,而不是僅僅詢問是否與當前的markerID不相等?

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)) { 
        /*markerID exists: Update Entry*/ 
         dbh.updateScore(dbh, Integer.parseInt(cursor.getString(0)), markerID, score); 
         finish(); 
        } 

        else if (!cursor.getString(1).equals(markerID)){ 
         /*markerID does not exist in Table: add new, but not for every entry where it does not equal to the current!*/ 
         dbh.addScore(dbh, score, markerID); 
         finish(); 
        } 
       } while (cursor.moveToNext()); 
      } 
      else { 
       /*Add first entry*/ 
       dbh.addScore(dbh, score, markerID); 
       finish(); 
      } 

我這是怎麼產生光標在我DbHelper類:

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

回答

1

的方法

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 

有一個參數 '選擇',在那裏你可以把你的markerID。像這樣的:

Cursor cursor = dbase.query(SCORE_TABLE, columns, "markerId = 'your string'", null, null, null, null); 
if (cursor != null && cursor.getCount() > 0) { 
    // you have rows with this marker id 
} 
+0

一個有效的答案,但值得注意的是,最好的做法是使用?選擇中的佔位符並在selectionArgs參數中提供值。也稱爲參數化查詢。這樣可以避免SQL注入和生成無效SQL的風險,其中值可能包含引號和撇號等字符。例如:dbase.query(SCORE_TABLE,columns,「markerId =?」,new String [] {「your string」},null,null,null) – NigelK

+0

是的,我同意:) – Jane

相關問題