SQLite是一款轻量级的关系型数据库,支持标准的SQL语法,还遵循了数据库的ACID事务。
用于存储大量复杂的关系型数据
SQLiteOpneHelper类:可以非常简单的对数据库进行创建和升级。它是一个抽象类。如果我们要使用它,就需要创建一个自己的帮助类去继承它。
必须重写类中的两个方法:onCreateView() :创建数据库 onUpgrade() :升级数据库
两个非常重要的实例方法:
两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。
SQLiteOpneHelper中有两个构造方法可供重写.。选择其中一个参数少的即可。接受四个参数:1. Context 2.数据库名 3.一个可以自定义的Cursor对象,一般传入null 4.版本号。
数据库文件放在/data/data/<.package name>/databases/目录下。
class MyDatabaseHelper (val context: Context,name:String,version :Int):SQLiteOpenHelper(context,name,null,version) {
//创建表语句
private val createBook ="create table Book ("+
" id integer primary key autoincrement,"+
"author text," +
"price real," +
"pages integer," +
"name text)"
override fun onCreate(db: SQLiteDatabase?) {
db?.execSQL(createBook)//执行建表语句
Toast.makeText(context,"Create Database succeeded",Toast.LENGTH_SHORT).show()//提示建表成功
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
//调用方式
val dbHelper = MyDatabaseHelper(this,"BookStore.db",1)
createDatabase.setOnClickListener {
dbHelper.writableDatabase
}
onCreate 一般只在第一次程序时执行。
如要添加新的表:需要在更新版本号,同时在onUpgrade() 进行处理。
CRUD :添加(create)、查询(retrieve)、更新(update)、删除(delete)
借助SQLiteDatabase对象可以对数据进行CRUD操作。
addData.setOnClickListener {
val db=dbHelper.writableDatabase//获取SQLiteDatabase 对象
val value1= ContentValues().apply {
put("name","The Da Vinci Code")
put("author","Dan Brown")
put("pages",454)
put("price",16.96)
}
db.insert("Book",null,value1)//插入第一条数据
val value2= ContentValues().apply {
put("name","The Lost Symbol")
put("author","Dan Brown")
put("pages",510)
put("price",19.95)
}
db.insert("Book",null,value2)//插入第二条数据
}
update()方法:接受四个参数,第一个参数:表名;
第二个参数: ContentValues
第三,四参数:用于约束更新的某一行或某几行中的数据,不指定就会默认更新所有行。
updateData.setOnClickListener {
val db=dbHelper.writableDatabase
val value1 = ContentValues().apply {
put("price",11.99)
}
db.update("Book",value1,"name = ?", arrayOf("The Da Vinci Code"))
Toast.makeText(this,"update Data succeeded",Toast.LENGTH_SHORT).show()
}
//第三个参数对应的SQL语句的where部分,表示更新所有name等于?的行,而?是占位符
//可以通过第四个参数提供的一个字符串数组,为第三个参数中的每一个占位符指定相应的内容、
//arrayOf()是kotlin提供的一种用于便捷创建数组的内置方法.
delete()方法 :接受三个参数 :第一个:表名,第二第三个参数,用于约束删除某一行或某几行的数据,不指定默认删除所有行。
deleteData.setOnClickListener {
val db=dbHelper.writableDatabase
db.delete("Book","pages>?", arrayOf("500"))
Toast.makeText(this,"Delete Data succeeded",Toast.LENGTH_SHORT).show()
}
query()方法 :(最少)七个参数:参数1:表名;参数2:用于指定去查询哪几列,不指定默认所有列;参数3.4:用于约束查询某行或某几行的数据,不指定默认查询所有列;参数5:用于指定需要去group by 的列,不指定则表示不对查询结果进行group by 操作;参数6:用于对于group by 之后的数据进行进一步过滤,不指定则不过滤;参数7:用于指定查询结果的排序方式,不指定使用默认的排序方式。
调用query()方法后会返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。
queryData.setOnClickListener {
val db=dbHelper.writableDatabase
val cursor=db.query("Book",null,null,null,null,null,null)
if(cursor.moveToFirst()){
do {
//遍历Cursor对象,取出数据并打印
val name=cursor.getString(cursor.getColumnIndex("name"))
val author=cursor.getString(cursor.getColumnIndex("author"))
val pages=cursor.getString(cursor.getColumnIndex("pages"))
val price = cursor.getString(cursor.getColumnIndex("price"))
Log.d("MainActivity","book name is $name")
Log.d("MainActivity","book author is $author")
Log.d("MainActivity","book pages is $pages")
Log.d("MainActivity","book price is $price")
}while (cursor.moveToNext())
}
cursor.close()
}