2018年1月7日 星期日

Android-SQLite 使用 SQLiteOpenHelper (四)_修改資料( Update )

上一篇我們提到新增資料

此篇我們要提到的是修改資料

1 . 修改資料
private static final String TABLE_CONTACTS = "counter";
private static final String KEY_DATE = "count_date";
private static final String KEY_NUMBER = "count_number";
private static final String KEY_NOTE = "count_note";
/**
 * 更新資料
 *
 * @param mDate
 * @param number
 * @param note
 */
public int updateData(@NonNull Date mDate, int number, String note) {
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    ContentValues values = new ContentValues();
    values.put(KEY_NUMBER, number);
    values.put(KEY_NOTE, note);

    String strSQL = KEY_DATE + " = ?";
    String[] strings = new String[]{sdf.format(mDate)};

    // 如果你有多條件
    /*
    String strSQL = KEY_DATE + " = ? AND " + KEY_NOTE + " = ?";
    // 第一問號,第二問號...以此類推
    String[] strings = new String[]{sdf.format(mDate), "Apple"};
    */

    SQLiteDatabase db = this.getWritableDatabase();
    return db.update(TABLE_CONTACTS, values, strSQL, strings);
}

為什麼 strSQL 不用放完整字組?為什麼條件參數要提出來?
要解這些問題前就必須追程式碼了











原來內部方法已經將修改指令寫在內部
所以我們只要編寫 Where 後的指令
那為什麼要用 String 裝條件的變數?
也是因為上圖最後幾行所提出來的
依照集合內的參數依序擺放

其實擺放參數有以下此方法 :
1 . 用集合方法( 如上方 )
2 . 只接將參數寫在條件內
private static final String TABLE_CONTACTS = "counter";
private static final String KEY_DATE = "count_date";
private static final String KEY_NUMBER = "count_number";
private static final String KEY_NOTE = "count_note";
. 
.
.
public int updateData(@NonNull Date mDate, int number, String note) {
   
    String strSQL = KEY_DATE + " = '2018-01-05'";

    SQLiteDatabase db = this.getWritableDatabase();
    return db.update(TABLE_CONTACTS, values, strSQL, null);
}


參考資料:SQLiteBrowser
歡迎轉載,請註明出處。

沒有留言:

張貼留言