學習完了如何向表中添加數據,接下來我們看看怎樣才能修改表中已有的數據。 SQLiteDatabase 中也是提供了一個非常好用的 update()方法用於對數據進行更新,這個方法 接收四個參數,第一個參數和 insert()方法一樣,也是表名,在這里指定去更新哪張表里的數據。第二個參數是 ContentValues 對象,要把更新數據在這里組裝進去。第三、第四個參數
用於去約束更新某一行或某幾行中的數據,不指定的話默認就是更新所有行。 那么接下來我們仍然是在 DatabaseTest 項目的基礎上修改,看一下更新數據的具體用法。
比如說剛才添加到數據庫里的第一本書,由於過了暢銷季,賣得不是很火了,現在需要通過 降低價格的方式來吸引更多的顧客,我們應該怎么操作呢?首先修改 activity_main.xml 中的 代碼,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" >
……
<Button android:id="@+id/update_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Update data"
/>
</LinearLayout>
布局文件中的代碼就已經非常簡單了,就是添加了一個用於更新數據的按鈕。然后修改
MainActivity 中的代碼,如下所示:
public class MainActivity extends Activity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);
……
Button updateData = (Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 10.99);
db.update("Book", values, "name = ?", new String[] { "The DaVinci Code" });
}
});
}
}
這里在更新數據按鈕的點擊事件里面構建了一個 ContentValues 對象,並且只給它指定 了一組數據,說明我們只是想把價格這一列的數據更新成 10.99。然后調用了 SQLiteDatabase 的 update()方法去執行具體的更新操作,可以看到,這里使用了第三、第四個參數來指定具 體更新哪幾行。第三個參數對應的是 SQL 語句的 where 部分,表示去更新所有 name 等於? 的行,而?是一個占位符,可以通過第四個參數提供的一個字符串數組為第三個參數中的每 個占位符指定相應的內容。因此上述代碼想表達的意圖就是,將名字是 The Da Vinci Code 的這本書的價格改成 10.99。
現在重新運行一下程序,界面如圖 6.23 所示。
圖 6.23
點擊一下 Update data 按鈕后,再次輸入查詢語句查看表中的數據情況,結果如圖 6.24所示。
圖 6.24
可以看到,The Da Vinci Code 這本書的價格已經被成功改為 10.99 了。