一起Talk Android吧(第二百三十一回:Android中的數據存儲之數據庫大結局)

各位看官們大家好,上一回中咱們說的是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中數據存儲之數據庫的例子咱們就介紹到這裏,欲知後面還有什麼例子,且聽下回分解!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章