各位看官們大家好,上一回中咱們說的是Android中數據存儲之數據庫的例子,這一回咱們繼續說該例子。閒話休提,言歸正轉。讓我們一起Talk Android吧!
看官們,我們在前面章回中介紹瞭如何創建數據庫,以及操作數據庫中的數據,下面是綜合練習的時候了,我們先建立一個工程,並且在工程的佈局文件中添加一些按鈕,然後給這些按鈕添加事件監聽器。監聽器的主要內容就是操作數據庫中的數據。監聽器不同,具體的操作也不同,這些操作包含插入,更新,刪除,查詢數據;下面是完整的代碼,請大家參考:
package com.example.talk8.blogappall;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
public class ActivityDatabase extends AppCompatActivity {
//數據庫名稱,表名稱以及數據庫版本號相關的變量
private static final String TAG = "DataStorage";
private static final String DB_NAME = "schoolA";
private int DBVersion = 1;
//數據庫和其Helper類的變量
private SchloolDB mSchloolDBHelper ;
private SQLiteDatabase mDatabase;
//操作數據庫的各種按鈕
private Button mCreateDB;
private Button mInsertData;
private Button mUpdateData;
private Button mDeleteData;
private Button mQueryData;
//創建數據庫中的表,名字是學生,包含姓名,年齡,班級三個信息字段
private static final String CREATE_STUDENT = "create table Student("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "age integer,"
+ "class text )";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database);
//關聯各種操作數據庫的按鈕
mCreateDB = (Button)findViewById(R.id.create_db);
mInsertData = (Button) findViewById(R.id.insert_data);
mUpdateData = (Button) findViewById(R.id.update_data);
mDeleteData = (Button) findViewById(R.id.delete_data);
mQueryData = (Button) findViewById(R.id.query_data);
//爲各種操作數據庫的按鈕添加事件監聽器
mCreateDB.setOnClickListener(v -> CreateDB(this));
mInsertData.setOnClickListener(v ->InsertData());
mUpdateData.setOnClickListener(v ->UpdateData());
mDeleteData.setOnClickListener(v ->DeleteData());
mQueryData.setOnClickListener(v ->QueryData());
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mSchloolDBHelper != null && mDatabase != null) {
Log.i(TAG, "onDestroy: Close DB");
mDatabase.close();
mDatabase = null;
mSchloolDBHelper = null;
}
}
// 創建SQLiteOpenHelper的子類並且重寫構造方法和onCreeate()等回調方法
class SchloolDB extends SQLiteOpenHelper {
public SchloolDB(Context context,
String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public SchloolDB(Context context, String name,
SQLiteDatabase.CursorFactory factory,
int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "onCreate of DB");
db.execSQL(CREATE_STUDENT);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
Log.i(TAG, "onOpen of DB");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade of DB");
}
}
public void CreateDB(Context context) {
//創建自定義子類的對象,通過該對象創建具體的數據庫
Log.i(TAG, "CreateDB: Create and open DB");
mSchloolDBHelper = new SchloolDB(context,DB_NAME,null,DBVersion);
mDatabase = mSchloolDBHelper.getWritableDatabase();
}
//向數據庫中的Student表中插入數據
public void InsertData() {
Log.i(TAG, "InsertData: ");
ContentValues values = new ContentValues();
values.put("name","Jame");
values.put("age","10" );
values.put("class","Class1" );
mDatabase.insert("Student",null , values);
values.put("name","Store");
values.put("age","12" );
values.put("class","Class2" );
mDatabase.insert("Student",null , values);
}
//更新數據庫Student表中的數據
//查找到表格中名字爲Jame的學生,把它的班級從Class1更新爲Class2
public void UpdateData() {
Log.i(TAG, "UpdateData: ");
ContentValues values = new ContentValues();
values.put("class", "Class2");
mDatabase.update("Student", values, "name= ?",new String[] {"Jame"});
}
//刪除數據庫Student表中的數據
//查找到表格中名字爲Jame的學生,把它所有的數據從表中刪除
public void DeleteData() {
Log.i(TAG, "DeleteData: ");
mDatabase.delete("Student","name= ?",new String[]{"Jame"});
}
//查詢數據庫Student表中的數據
//沒有使用查詢條件,因此查找到表中所有的內容
public void QueryData() {
Log.i(TAG, "QueryData: ");
Cursor cursor = mDatabase.query("Student",null ,
null, null, null, null, null);
if(cursor.moveToFirst()) {
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String className = cursor.getString(cursor.getColumnIndex("class"));
Log.i(TAG,"Name: "+name+" Age: "+ age +" Class: "+className);
}while (cursor.moveToNext());
}
cursor.close();
}
}
下面是程序的運行結果,請大家參考:
//按下CreateDatabase按鈕創建數據庫
I/DataStorage: CreateDB: Create and open DB
I/DataStorage: onCreate of DB
I/DataStorage: onOpen of DB
//按下InsertData的按鈕向數據庫中插入數據
I/DataStorage: InsertData:
//按下QueryData的按鈕查詢數據庫中的數據,數據已經被插入
I/DataStorage: QueryData:
I/DataStorage: Name: Jame Age: 10 Class: Class1
I/DataStorage: Name: Store Age: 12 Class: Class2
//按下DeleteData的按鈕刪除數據庫中的數據
I/DataStorage: DeleteData:
//按下QueryData的按鈕查詢數據庫中的數據,數據已經被刪除
I/DataStorage: QueryData:
I/DataStorage: Name: Store Age: 12 Class: Class2
//按下InsertData的按鈕向數據庫中插入數據
I/DataStorage: InsertData:
//按下QueryData的按鈕查詢數據庫中的數據,數據已經被插入
I/DataStorage: QueryData:
I/DataStorage: Name: Store Age: 12 Class: Class2
I/DataStorage: Name: Jame Age: 10 Class: Class1
I/DataStorage: Name: Store Age: 12 Class: Class2
//按下UpdateData的按鈕更新數據庫中的數據,數據已經被更新
I/DataStorage: UpdateData:
I/DataStorage: QueryData:
I/DataStorage: Name: Store Age: 12 Class: Class2
I/DataStorage: Name: Jame Age: 10 Class: Class2
I/DataStorage: Name: Store Age: 12 Class: Class2
//銷燬Activity時關閉數據庫
I/DataStorage: onDestroy: Close DB
看官們,關於數據庫的操作我們全部介紹完了,我們使用的是SQLite
相關類以及類中的方法,不過在新版本中官方不推薦直接使用SQLite操作數據庫,而是使用ROOM
來操作數據庫,因爲Room
在SQLite上提供了一個抽象層,以便在充分利用SQLite的強大功能的同時,能夠流暢地訪問數據庫。因此,我也推薦大家使用數據庫的時候過渡到ROOM。關於ROOM的內容比較多,而且我在工作中也沒有使用過,因此先不分享這方面的經驗了,感興趣的看官可以參考官方文檔來學習。
各位看官,關於Android中數據存儲之數據庫的例子咱們就介紹到這裏,欲知後面還有什麼例子,且聽下回分解!