2015-06-25 2 views
0

У меня есть таблица SQLite с 3 полями: первый - это id (автоинкремент), второй - markerID (String) и третий score (Integer).Проверьте, существует ли определенный контент в SQLite

Я хочу добавить новую строку, если текущий markerID активности еще не существует в таблице.

Проблема заключается в том, что курсор проходит через записи, и уже есть запись, которая не имеет текущего markerID, она добавляет новый для каждого другого маркерного идентификатора, хранящегося в таблице, даже если это не так, потому что текущий 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, столбцы, "markerId =?", Новый String [] {"ваша строка"}, null, null, null) – NigelK

+0

Да, я согласен :) – Jane

Смежные вопросы