《第一行代码:Android》第三版7.4SQLite数据库存储
布局文件略过,就是五个按钮,点击按钮执行对应的功能。
Android 专门提供了一个SQLiteOpenHelper帮助类来对数据库进行创建和升级。
自己创建一个类继承自SQLiteOpenHelper,重新写onCreate()方法和onUpgrade()方法,分别对应创建数据库和升级数据库。
还有两个非常重要的方法:getReadableDatabase()和getWritableDatabase(),它们都可以创建或者打开一个现有的数据库。
insert()方法用于添加数据。
update()方法用于对数据进行更新。
delete()方法用来删除数据。
query()方法用来查询数据,返回的是一个Cursor对象。
主代码文件内容如下:
package com.example.databasetest
import android.annotation.SuppressLint
import android.content.ContentValues
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
class MainActivity : AppCompatActivity() {
@SuppressLint("SuspiciousIndentation")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//下面的是数据库相关的代码
//创建数据库
val dbHelper=MyDatabaseHelper(this,"BookStore.db",1)
val createDatabase: Button =findViewById(R.id.createDatabase)
createDatabase.setOnClickListener{
dbHelper.writableDatabase//没错,我就是用来创建你这个 xxx.db 的
}
//增加一条记录
val addData:Button=findViewById(R.id.addData)
addData.setOnClickListener{
val db=dbHelper.writableDatabase
//ContentValues()是个啥?原书没有说,咱也不敢问啊,照着写就得嘞
val values1=ContentValues().apply{
//开始组装第一条数据
put("name","The Da Vinci Code")
put("author","Dan Brown")
put("pages",454)
put("price",16.96)
}
//插入第一条数据
db.insert("Book",null,values1)
//第二条数据
val values2=ContentValues().apply{
//开始组装第一条数据
put("name","The Lost Symbol")
put("author","Dan Brown")
put("pages",510)
put("price",19.95)
}
//插入第二条数据
db.insert("Book",null,values2)
}
//更新一条记录,把书的价钱更改为10.99
val updateData:Button=findViewById(R.id.updateData)
updateData.setOnClickListener{
val db=dbHelper.writableDatabase
val values=ContentValues()
values.put("price",10.99)
db.update("Book",values,"name= ?", arrayOf("The Da Vanci Code"))
}
//删除一条记录
val deleteData:Button=findViewById(R.id.deleteData)
deleteData.setOnClickListener{
val db=dbHelper.writableDatabase
db.delete("Book","pages > ?",arrayOf("500"))
}
//查询数据,也是最复杂的一种,需要更多的精力来学习
val queryData:Button=findViewById(R.id.queryData)
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()) }
}
}
}
直接用下面这种方法,可以直接操作数据库,感觉这种比较简单,但是容易出错。
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
arrayOf("The Da Vinci Code", "Dan Brown", "454", "16.96")
)
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
arrayOf("The Lost Symbol", "Dan Brown", "510", "19.95")
)
//更新
db.execSQL("update Book set price = ? where name = ?", arrayOf("10.99", "The Da Vinci Code"))
//删除
db.execSQL("delete from Book where pages > ?", arrayOf("500"))
//查询
val cursor = db.rawQuery("select * from Book", null)
实际情况会比例子复杂多了,很多内容都需要深入研究的,本文只是能起到入门的作用。