前言
在android
开发过程中,免不了使用数据库的问题。Android
自带数据库SQLite
,今天就让我们来学习Android环境下SQLite
数据库吧。
今天涉及知识点有:
- SQLite数据库实现数据库基础
- 数据库基本操作
- SQLite数据库的使用
- 需要注意的问题
- 效果图和项目结构图
- 源码
先来波效果图
效果图.gif
一. SQLite数据库实现数据库基础
SQLiteDatabase
是SQLite
数据库管理类, SQLiteDatabase
提供了很多操作数据库的API
,所以我们在要进行数据库操作时,可以通过SQLiteDatabase
对象进行。
要实现数据库的业务数据的保存和读取,我们还需要继承SQLiteOpenHelper
来实现。
所以在SQLite
数据库操作中,我们比较关注的是两个点:SQLiteDatabase
和SQLiteOpenHelper
二. 数据库基本操作
下面来初步理解下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
代码:
网友评论