У меня есть таблица 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;
}
Действительный ответ, но стоит отметить, что лучше всего использовать? заполнитель в выборе и указать значение в параметре selectionArgs. Также известен как параметризованный запрос. Это позволяет избежать возникновения SQL-инъекций и недействительного SQL-кода, в котором значение может содержать символы, такие как кавычки и апострофы. Например: dbase.query (SCORE_TABLE, столбцы, "markerId =?", Новый String [] {"ваша строка"}, null, null, null) – NigelK
Да, я согласен :) – Jane