美文网首页
Kotlin笔记(56) — SQLiteOpenHelper实

Kotlin笔记(56) — SQLiteOpenHelper实

作者: 奔跑的佩恩 | 来源:发表于2021-02-20 11:42 被阅读0次

前言

android开发过程中,免不了使用数据库的问题。Android自带数据库SQLite,今天就让我们来学习Android环境下SQLite数据库吧。

今天涉及知识点有:

  1. SQLite数据库实现数据库基础
  2. 数据库基本操作
  3. SQLite数据库的使用
  4. 需要注意的问题
  5. 效果图和项目结构图
  6. 源码

先来波效果图


效果图.gif

一. SQLite数据库实现数据库基础

SQLiteDatabaseSQLite数据库管理类, SQLiteDatabase提供了很多操作数据库的API,所以我们在要进行数据库操作时,可以通过SQLiteDatabase对象进行。
要实现数据库的业务数据的保存和读取,我们还需要继承SQLiteOpenHelper来实现。
所以在SQLite数据库操作中,我们比较关注的是两个点:SQLiteDatabaseSQLiteOpenHelper

二. 数据库基本操作

下面来初步理解下SQLite数据库的基本操作。
我们可以像下面这样创建或打开一个数据库:

   //创建数据库,若已经存在,则打开
   var db:SQLiteDatabase=mContext.applicationContext.openOrCreateDatabase("user.db",Context.MODE_PRIVATE,null) 

但以上代码我们常用于打开一个已经存在的数据库。
要删除一个数据库文件的话,我们可以像下面这样:

    /**删除数据库文件**/
    fun delateAllFiles(){
        mContext!!.applicationContext.deleteDatabase("user.db")
    }

那么,现在我们对SQLite数据库已经有一个基本的理解了,下面让我们来继续学习。

三. SQLite数据库的使用

SQLite数据库的操作无非涉及到增删改查。然后大致逻辑是,继承SQLiteOpenHelper实现一个类(这里我们给该类命名为DatabaseHandler),然后在DatabaseHandler类中实现数据库的基本创建。在DatabaseHandler中对SQLiteDatabase进行实例化(一般我们对SQLiteDatabase进行单例处理,为的是防止多个SQLiteDatabase造成数据库连接太多)
这里我继承SQLiteOpenHelper写了一个DatabaseHandler用于创建SQLite数据库,然后写了一个数据库操作帮助类DbHelper,具体的数据库操作(增删改查)均在DbHelper中进行。大致如下:

  • DatabaseHandler : 创建SQLite数据库
  • DbHelper:处理具体的数据操作(增删改查)

下面给出数据库在MainActivity中使用代码:

open class MainActivity : AppCompatActivity(), View.OnClickListener {

    private var mDbHelper:DbHelper= DbHelper(this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        initData()
        setListener()
    }

    private fun initData() {

    }

    private fun setListener(){
        mBtnTest.setOnClickListener(this@MainActivity)
    }

    override fun onClick(v: View) {
        when (v.id) {
            R.id.mBtnTest -> {
                //测试
                test()
            }
        }
    }

    private fun test() {
        //删除表中所有数据
        mDbHelper.delateAll()

        //查询所有数据
        checkAllData()

        //插入
        LogUtil.i("=======执行插入=======")
        for(index in 0 until 3) {
            var user: User = User("小明${index}", 12+index)
            mDbHelper.insert(user)
        }
        //查询所有数据
        checkAllData()

        //修改"小明"年龄为500
        LogUtil.i("=======修改 小明0 的age为500=======")
        var user: User = User("小明0", 500)
        mDbHelper.update(user)
        //查询所有数据
        checkAllData()

        //删除
        LogUtil.i("=======删除 小明1 =======")
        var user1: User = User("小明1", 13)
        mDbHelper.delete(user)
        //查询所有数据
        checkAllData()
    }

    private fun checkAllData(){
        var buffer:StringBuffer= StringBuffer()

        var list:MutableList<User> = mDbHelper.checkAll()
        if(!list.isEmpty()) {
            for (bean in list) {
                LogUtil.i("name=${bean.name}  age=${bean.age}")
                buffer.append("name=${bean.name}  age=${bean.age}\n")
            }
            toast(buffer.toString())
        }else{
            toast("无数据")
        }
    }
}

四.需要注意的问题

需要注意的是,当我们直接删除数据库文件,类似如下:

    /**删除数据库文件**/
    fun delateAllFiles(){
        mContext!!.applicationContext.deleteDatabase("user.db")
    }

然后再执行添加数据,是可以重建数据库文件及相关表文件并插入数据成功的。
然后如果我们是直接删除该数据的某个表,然后再对该表执行数据插入,是会报错的,提示该表不存在,虽然我们在建表的时候有如下语句:

    override fun onCreate(db: SQLiteDatabase?) {
        var createTable:String =
            "CREATE TABLE IF NOT EXISTS ${TABLE_NAME}(${ID} integer NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
                    "                                ${NAME} text,\n" +
                    "                                ${AGE} integer);"
        //创建表
        db!!.execSQL(createTable)
    }

也还是不行的,这是需要注意的地方。

五.效果图和项目结构图

效果图.gif 项目结构图.png

六. 源码

这里涉及到的源码有两个类:

  • DatabaseHandler : 创建SQLite数据库
  • DbHelper:处理具体的数据操作(增删改查)

先给出DatabaseHandler代码:

相关文章

网友评论

      本文标题:Kotlin笔记(56) — SQLiteOpenHelper实

      本文链接:https://www.haomeiwen.com/subject/omzwtltx.html