《第一行代码: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)

 实际情况会比例子复杂多了,很多内容都需要深入研究的,本文只是能起到入门的作用。