【SQLite數據庫存儲】CRUD操作
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()方法,這個方法就是專門用于添加數據的
它接收三個 參數,第一個參數是表名,我們希望向哪張表里添加數據,這里就傳入該表的名字。第二個 參數用于在未指定添加數據的情況下給某些可為空的列自動賦值 NULL,一般我們用不到這 個功能,直接傳入 null即可。第三個參數是一個 ContentValues對象,它提供了一系列的 put() 方法重載,用于向 ContentValues中添加數據,只需要將表中的每個列名以及相應的待添加 數據傳入即可
介紹完了基本用法,接下來還是讓我們通過例子的方式來親身體驗一下如何添加數據 吧。修改 activity_main.xml中的代碼,在布局文件中又新增了一個按鈕
......
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add data" />
修改MainActivity的代碼
Button addData = (Button) findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.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.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()方法
現在可以重新運行一下程序了,點擊一下 Adddata按鈕,此時兩條數據應該都已經添加成功了,不過為了證實一下,我 們還是打開 BookStore.db數據庫瞧一瞧。輸入 SQL 查詢語句 select * from Book;
更新數據
SQLiteDatabase中也是提供了一個非常好用的 update()方法用于對數據進行更新,這個方法 接收四個參數,第一個參數和 insert()方法一樣,也是表名,在這里指定去更新哪張表里的數據。第二個參數是 ContentValues對象,要把更新數據在這里組裝進去。第三、第四個參數 用于去約束更新某一行或某幾行中的數據,不指定的話默認就是更新所有行
activity_main.xml
<Button android:id="@+id/update_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Update data" />
布局文件中的代碼就已經非常簡單了,就是添加了一個用于更新數據的按鈕。然后修改 MainActivity中的代碼
Button updateData = (Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price","10.99");
db.update("Book",values,"name=?", new String[] { "The Da Vinci Code" });
}
});
這里在更新數據按鈕的點擊事件里面構建了一個 ContentValues對象,并且只給它指定 了一組數據,說明我們只是想把價格這一列的數據更新成 10.99。然后調用了 SQLiteDatabase 的 update()方法去執行具體的更新操作,可以看到,這里使用了第三、第四個參數來指定具 體更新哪幾行。第三個參數對應的是 SQL語句的 where部分,表示去更新所有 name等于? 的行,而?是一個占位符,可以通過第四個參數提供的一個字符串數組為第三個參數中的每 個占位符指定相應的內容。因此上述代碼想表達的意圖就是,將名字是 The DaVinci Code 的這本書的價格改成 10.99
點擊一下 Update data按鈕后,再次輸入查詢語句查看表中的數據情況
TheDaVinciCode這本書的價格已經被成功改為 10.99了
刪除數據
SQLiteDatabase中提供了一個 delete()方法專門用于刪除數據,這個方法接收三個參數,第一 個參數仍然是表名,第二、第三個參數又是用于去約束刪除某一 行或某幾行的數據,不指定的話默認就是刪除所有行
修改activity_main.xml中的代碼,增加一個用于刪除的Button
<Button
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete data" />
修改 MainActivity中的代碼
Button deleteButton = (Button) findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
db.delete("Book", "pages > ?", new String[]{"500"});
}
});
我們在刪除按鈕的點擊事件里指明去刪除 Book表中的數據,并且通過第二、 第三個參數來指定僅刪除那些頁數超過 500頁的書籍。其中 TheLostSymbol這本書的頁 數超過了 500頁,也就是說當我們點擊刪除按鈕時,這條記錄應該會被刪除掉
點擊一下 Delete data按鈕后,再次輸入查詢語句查看表中的數據情況
查詢數據
SQL的全稱是 Structured Query Language
SQLiteDatabase中還提供了一個 query()方法用于對數據進行查詢。 這個方法的參數非常復雜,最短的一個方法重載也需要傳入七個參數
第一個參數不用說,當然還是表名
第二個參數用于指定去查詢哪幾列,如果不指定則默認查詢所有列
第三、第四個 參數用于去約束查詢某一行或某幾行的數據,不指定則默認是查詢所有行的數據
第五個參 數用于指定需要去 groupby的列,不指定則表示不對查詢結果進行 groupby操作
第六個參 數用于對 groupby之后的數據進行進一步的過濾,不指定則表示不進行過濾
第七個參數用 于指定查詢結果的排序方式,不指定則表示使用默認的排序方式
更多詳細的內容可以參考 下表
雖然 query()方法的參數非常多,但我們不必為每條查詢語 句都指定上所有的參數,多數情況下只需要傳入少數幾個參數就可以完成查詢操作了。調用 query()方法后會返回一個 Cursor對象,查詢到的所有數據都將從這個對象中取出
修改main_activity.xml
<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Query data" />
修改MainActivity中代碼
Button queryButton = (Button) findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
//查詢Book表中所有數據
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
//遍歷Cursor對象,取出數據并打印
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int page = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity","book name is "+name);
Log.d("MainActivity","book author is "+author);
Log.d("MainActivity","book pages is "+page);
Log.d("MainActivity","book price is "+price);
}while (cursor.moveToNext());
}
cursor.close();
}
});
我們首先在查詢按鈕的點擊事件里面調用了 SQLiteDatabase的 query()方法 去查詢數據
這里的 query()方法非常簡單,只是使用了第一個參數指明去查詢 Book表,后 面的參數全部為 null。這就表示希望查詢這張表中的所有數據,雖然這張表中目前只剩下一 條數據了
查詢完之后就得到了一個 Cursor對象,接著我們調用它的 moveToFirst()方法將數據的指針移動到第一行的位置,然后進入了一個循環當中,去遍歷查詢到的每一行數據。在 這個循環中可以通過 Cursor的 getColumnIndex()方法獲取到某一列在表中對應的位置索引, 然后將這個索引傳入到相應的取值方法中,就可以得到從數據庫中讀取到的數據了。接著我 們使用 Log的方式將取出的數據打印出來,借此來檢查一下讀取工作有沒有成功完成。最后 別忘了調用 close()方法來關閉 Cursor
使用 SQL操作數據庫
雖然 Android已經給我們提供了很多非常方便的 API用于操作數據庫,不過總會有一些 人不習慣去使用這些輔助性的方法,而是更加青睞于直接使用 SQL來操作數據庫
下面直接用SQL完成前面的CRUD操作
添加數據
db.execSQL("insert into Book (name,author,pages,price) values(\"The Da Vinci Code\",\"Dan Brown\",\"454\",\"16.96\")");
db.execSQL("insert into Book (name,author,pages,price) values(\"The Lost Symbol\",\"Dan Brown\",\"510\",\"19.955\")");
更新數據
db.execSQL("update Book set price = \"10.99\" where name = \"The Da Vinci Code\"");
刪除數據
db.execSQL("delete from Book where pages > 500");
查詢數據
db.rawQuery("select * from Book",null);
,除了查詢數據的時候調用的是 SQLiteDatabase的 rawQuery()方法,其他的操 作都是調用的 execSQL()方法。以上演示的幾種方式,執行結果會和前面幾小節中我們學習 的 CRUD操作的結果完全相同,選擇使用哪一種方式就看你個人的喜好了
智能推薦
SQLite數據庫CRUD操作
案例目錄截圖: 運行截圖: (1)在MainActivity所在的包里,新建名為DbHelper的SQLite數據庫打開助手類 重寫onCreate()和onUpgrade()方法 (2)在MainActivity所在的包里,新建名為MyDAO的數據庫訪問類: (3)在主布局activity_main.xml添加相應代碼: 2個TextView:分別表示姓名和年齡; 2個EditText:id分別...
Android中的SQLite數據庫存儲
SQLlite是一款輕量級的關系型數據庫, 作為Android系統內置的數據庫, 它的運算數度非常快,占用資源少,通常只需幾百KB的內存就足夠,SQLite不像其他關系型數據庫擁有眾多繁雜的數據類型,它的數據類型很簡單,integer 表示整型, real表示浮點型, text表示文本類型, bolb表示二進制型。 此處出示一個SQLite數據庫存儲的案例: SQLite...
SQLite數據庫存儲(一)【安卓學習筆記】
對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同? MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉 MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面 但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫 主要內容: 創建和打開一個SQLite 數據庫 SQLite數...
17讀書筆記之SQLite數據庫存儲
SQLite數據庫存儲 創建數據庫 Android管理數據庫提供了一個SQLiteOpenHelper幫助類。 借助這個類就可以簡單地對數據庫進行創建和升級。下面學習SQLiteOpenHelper的基本用法。 首先SQLiteOpenHelper是一個抽象類,我們要是用的話,需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法。 onCreate()和onUpgra...
猜你喜歡
使用Android studio實現SQLite數據庫存儲
使用Android studio實現SQLite數據庫存儲 題目 代碼 XML代碼(1) XML代碼(2) JAVA代碼(1) JAVA代碼(2) JAVA代碼(3) 運行結果 題目 1.要求按圖1完成設計,此界面為啟動界面。其中Spinner中的數據為:語文,數學,英語,歷史,生物。Spinner使用適配器綁定數據。 2.當點擊“添加成績”按鈕時,先判斷SQLite中是否...
SQLite數據庫存儲(創建數據庫,升級數據庫和增刪改查四種基本操作)
我們Android系統是內置了數據庫的,在SDK中的platform-tools文件夾中。 SQLite是一款輕量級的關系型數據庫,它的運算速度非常快,占用資源很少,通常只需要幾百k的內存就足夠了,因此比較適合在移動設備上使用。 創建數據庫 首先我們需要創建一個自己的幫助類,去繼承于SQLiteOpenHelper這個幫助類。SQLiteOpenHelper中有兩個抽象方法,一個是onCreate...
【鼠】安卓學習雜記(十三)——Android數據存儲之SQLite數據庫存儲
一、適用場景 適用于存儲一些復雜的關系型數據。 二、概述 輕量級嵌入式數據庫引擎,它支持SQL 語言,并且只利用很少的內存就有很好的性能。可存儲大量的數據。 Android SQLite對我目前的安卓學習水平而言,還是比較復雜的,在此處暫不做詳細闡述,僅以此時使用狀態闡述。 三、使用步驟 第一步:創建MyDatabaseHelper繼承SQLiteOpenHelper 第二步:在MainActiv...
【python3】 sqlite3操作SQLite數據庫存取圖片
【python3】 sqlite3操作SQLite數據庫存取圖片 1.背景 2.code 3.運行結果 1.背景 SQLite 原生支持如下的類型: NULL,INTEGER,REAL,TEXT,BLOB。 因此可以將以下Python類型發送到SQLite而不會出現任何問題: 這是SQLite類型默認轉換為Python類型的方式: sqlite3 模塊的類型系統可通過兩種方式來擴展(本博文不涉及)...
SQLite數據庫的DAO標準CRUD操作
文章目錄 項目要求 基本功能 項目參考 效果演示 主要代碼 完整項目地址 總結 項目要求 通過實例掌握SqlLite的DAO操作 基本功能 添加:輸入信息,點擊“添加”按鈕添加進數據表中 修改:選定要修改的信息,輸入要修改的數據,點擊“修改”按鈕保存修改 刪除:選定要刪除的信息,點擊“刪除”按鈕刪除該信息 查詢:呈現在主頁Vi...