一起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中数据存储之数据库的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值