簡體   English   中英

使用更新方法更新SQLite行

[英]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 whereClausecolumn_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM