1. 程式人生 > >Android SQLite資料庫儲存之新增資料

Android SQLite資料庫儲存之新增資料

本篇文章還是在Android SQLite資料庫儲存之升級資料庫的基礎上進行修改,現在已經掌握了建立和升級資料庫的方法,接下里就學習一下如何對錶中的資料進行操作了,其實我們可以對資料進行的操作無非就是4種,即CRUD,其中C代表(Create),R代表查詢(Retrieve),U代表更新(Update),D代表刪除(Delete),每一種操作又各自對應了一種SQL命令,如果你比較熟悉SQL語言的話,一定會知道新增資料時使用insert,查詢資料時使用select,更新資料時使用update,刪除資料時使用delete,但是開發者的水平總會是參差不齊的,未必每一個人都能非常熟悉地使用SQL語言,因此Android也提供了一系列的輔助性方法,使得在Android中即使不去編寫SQL語句,也能輕鬆完成所有的CRUD操作。

前面我們已經知道,呼叫SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法是可以用於建立和升級資料庫的,不僅如此,這兩個方法還都會返回一個SQLiteDatabase物件,藉助這個物件就可以對資料進行CRUD操作了。

先學習一下如何向資料庫的表中新增資料,SQLiteDatabase中提供了一個insert()方法,這個方法就是專門用於新增資料的,它接收3個引數,第一個引數是表名,我們希望向哪張表裡新增資料,這裡就傳入該表的名字,第二個引數用於在未指定新增資料的情況下給某些可為空的列自動賦值NULL,一般我們用不到這個功能,直接傳入null即可,第二個引數是一個ContentValues物件,它提供了一系列的put()方法過載,用於向ContentValues中新增資料,只需要將表中的每個列名以及相應的待新增資料傳入即可。

介紹完了基本用法,接下來還是通過一個例子來體驗一下如何新增資料,修改activity_main.xml中的程式碼,如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.activitytest.MainActivity"> <Button android:id="@+id/create_database" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Create database" android:textAllCaps="false"/> <Button android:id="@+id/add_data" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add data" android:textAllCaps="false" app:layout_constraintTop_toBottomOf="@id/create_database"/> </android.support.constraint.ConstraintLayout>
可以看到,我們在佈局檔案中又新增了一個按鈕,稍後就會在這個按鈕的點選事件裡編寫新增資料的邏輯,接著修改MainActivity中的程式碼,如下:
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,3);
Button createDatabase = findViewById(R.id.create_database);
Button addData = findViewById(R.id.add_data);
createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
public void onClick(View view) {
                dbHelper.getWritableDatabase();
}
        });
addData.setOnClickListener(new View.OnClickListener() {
            @Override
public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//開始新增第一條資料
values.put("name","The Da VinCi Code");
values.put("author","Dan Brown");
values.put("pages",454);
values.put("price",16.96);
db.insert("Book",null,values);//插入第一條資料
values.clear();
//開始新增第二條資料
values.put("name","The Lost Symbol");
values.put("author","Dan Brown");
values.put("pages",510);
values.put("price",19.95);
db.insert("Book",null,values);//插入第三條資料
}
        });
}
}
在新增資料按鈕的點選事件裡面,我們先獲取到了SQLiteDatabase物件,然後使用ContentValues來對要新增的資料進行組裝,如果你比較細心的話應該會發現,這裡只對Book表裡其中四列的資料進行了組裝,id那一列並沒給它賦值,這是因為在前面建立表的時候,我們就將id列設定為自增長了,它的值會在入庫的時候自動生成,所以不需要手動給它賦值了,接下來呼叫了insert()方法將資料新增到表當中,注意這裡我們實際上添加了兩條資料,上述程式碼中使用ContentValues分別組裝了兩次不同的內容,並呼叫了兩次insert()方法。

好了,現在可以重新執行一下程式了,介面如圖:

點選一下Add data按鈕,此時兩條資料應該都已經新增成功了,不過為了證實一下,我們還是開啟BookStore.db資料庫瞧一瞧,輸入SQL查詢語句select * from Book,注意SQL語句必須用分號(;)結尾,結果如圖:

由此可以看出,我們剛剛組裝的兩條資料都已經準確無誤的新增到Book表中了。