布局文件略過,就是五個按鈕,點擊按鈕執行對應的功能。
Android 專門提供了一個SQLiteOpenHelper幫助類來對數據庫進行創建和升級。
自己創建一個類繼承自SQLiteOpenHelper,重新寫onCreate()方法和onUpgrade()方法,分別對應創建數據庫和升級數據庫。
還有兩個非常重要的方法:getReadableDatabase()和getWritableDatabase(),它們都可以創建或者打開一個現有的數據庫。
insert()方法用于添加數據。
update()方法用于對數據進行更新。
delete()方法用來刪除數據。
query()方法用來查詢數據,返回的是一個Cursor對象。
主代碼文件內容如下:
package com.example.databasetestimport android.annotation.SuppressLint
import android.content.ContentValues
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Buttonclass 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}//增加一條記錄val addData:Button=findViewById(R.id.addData)addData.setOnClickListener{val db=dbHelper.writableDatabaseval 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.99val updateData:Button=findViewById(R.id.updateData)updateData.setOnClickListener{val db=dbHelper.writableDatabaseval 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.writableDatabasedb.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)
?實際情況會比例子復雜多了,很多內容都需要深入研究的,本文只是能起到入門的作用。