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