SQLite特性
- 是一款轻量级的关系型数据库
- 无需安装即可使用
- 原生就支持Android, 无需进行特殊操作
- 可实现事务处理
- 所有数据信息全部在一个文件夹内, 方便管理
SQLite的使用
1, 先创建一个常量类用来保存数据库名称等信息
object DBConstants {
const val DB_NAME = "tdbname" //数据库名称
const val DB_VERSION = 1 //数据库版本
const val T_TABLE_NAME = "t_table_name" //数据库表名
}
2,创建一个helper类用来继承SQLiteOpenHelper类, 并实现新建数据库和升级数据库的方法
class DataBaseHelper(context: Context?) : SQLiteOpenHelper(context, DBConstants.DB_NAME, null, DBConstants.DB_VERSION) {
/**
* 创建
*/
override fun onCreate(db: SQLiteDatabase) {}
/**
* 更新
*/
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}
}
3,在onCreate(数据库新建之后,首先执行的方法)方法中添加新建表的sql
val sql = "create table "+DBConstants.T_TABLE_NAME+"(_id integer,name varchar)"
db.execSQL(sql)
先测试一下数据库是不是能创建成功, 在app的登陆界面调用这个方法即可
private fun initDB(){
val helper = DataBaseHelper(applicationContext)
helper.writableDatabase
}
用Android studio 自带的文件查看, 路径如下, 在data里找到自己项目所对应的的包名, 在包名路径下的 database路径为数据库地址
用数据库工具打开即可看到表已经创建完成了, 说明数据库初始化并没有什么问题
4, onUpgrade方法(数据库更新方法,当数据库版本号不一致,执行方法内逻辑)
将constants中的 DB_VERSION 值改为3, 然后在更新方法中添加以下代码, 这样写是为了处理实际生产环境中, 数据库版本可能跨版本的问题
/**
* 更新
*/
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
var sqlArr = emptyArray<String>()
var sql = ""
when (oldVersion) {
1 -> sqlArr = arrayOf("alter table " + DBConstants.T_TABLE_NAME + " add age integer",
"alter table " + DBConstants.T_TABLE_NAME + " add num varchar")
2 -> sql = "alter table " + DBConstants.T_TABLE_NAME + " add num varchar"
else -> sql = ""
}
//如果相差一个版本,执行一个sql, 如果相差多个版本需要对数组进行遍历,分别添加对应的sql
//sqLite不支持一次添加多列
if (newVersion - oldVersion == 1) {
db.execSQL(sql)
} else {
sqlArr.forEach {
db.execSQL(it)
}
}
}
运行之后,可以看到,两个字段已经同时加进去了
数据库增删改查的使用请参考下一篇文章
原生Android sqlite的使用(二) 数据库的增删改查