[英]Updating SQLite row using update method
我正在嘗試使用update(String table,ContentValues values,String whereClause,String [] whereArgs)方法在android上的SQLite中更新一行。 我在此引用了很多資料,在網絡上的其他地方也看到了如何做的描述,但似乎沒有用。 我的主要問題是我不了解傳遞給方法do的最后兩個變量以及如何正確設置它們。
字符串whereClause:這是做什么的? 傳遞null會更改列中的所有值,但是如果您只想在sql數據庫的“ x”行中切換一行,該怎么辦? 怎么辦? String [] whereArgs:這是做什么的?
碼
//how do you edit variable NOTE_TEXT at pos to be editedNote
public void editNotes(int pos, String editedNote){
SQLiteDatabase db = helper.getWritableDatabase();
String postion = Integer.toString(pos);
ContentValues newContentValues = new ContentValues();
newContentValues.put(NoteDBHelper.NOTE_TEXT, editedNote);
db.update( "noteTable", newContentValues, NoteDBHelper.NOTE_TEXT + " = " + postion, null);
}
static class NoteDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "noteDB";
private static final int DATABASE_VERSION = 5;
private static final String TABLE_NAME = "noteTable";
private static final String UID = "_id";
private static final String NOTE_TEXT = "note";
private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME + "";
/* private static final String CREATE_TABLE = "CREATE TABLE "+ TABLE_NAME +
" (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_TEXT +
" VARCHAR(255), );";*/
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_TEXT + " VARCHAR(255) );";
public NoteDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
} catch (SQLiteException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
WHERE子句是您的查詢的過濾器。 普通的WHERE子句看起來像這樣
UPDATE table_name
SET column_name = value
WHERE column_name1 = value1 AND/OR column_name2 = value2 AND/OR...
當您將表名稱傳遞給db.update()時,它會為您執行第一步。 String whereClause
是column_name1=
一部分, value1
將放置在String[] whereArgs
點中。 只要您的String whereClause
具有column_name1 = value1
子句的完整選項,就可以將String[] whereArgs
傳遞給null
選項。
whereClause
充當過濾器,以限制UPDATE語句更改哪些行。
如果您想將一行設置為“ x”,則可以這樣做:
String whereClause = "note = \"the\"";
db.update("noteTable", "x", whereClause, null);
這將更新“注釋”列包含值“ the”的所有行。
Rhuarc13答案的更新:
String whereClause = "position = ?";
String[] values = new String[]{position};
db.update(TABLE_NAME, newContentValues, whereClause, values);
這樣,您不必擔心使用where子句轉義字符等問題。 update
需要第二個參數的ContentValues
而不是String,所以寫他的答案是行不通的。
但是,您的表中似乎沒有“位置”字段。 id字段可能與表格中行的位置相對應,也可能不相對應,因此您不應依賴於此。 如果您有獲取ID的方法,那就很好,否則,您將需要另一個可以設置為正確值的字段以反映該行的位置,並將其用於更新。
編輯:如果要通過ID查詢:
String whereClause = UID + " = ?";
String[] values = new String[]{String.valueOf(id)};
db.update(TABLE_NAME, newContentValues, whereClause, values);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.