国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQLite數(shù)據(jù)庫(kù)

這篇具有很好參考價(jià)值的文章主要介紹了SQLite數(shù)據(jù)庫(kù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

SQLite數(shù)據(jù)庫(kù)

在Android中的使用

SQLiteOpenHelper中的方法

增刪改查

添加數(shù)據(jù) insert()

查詢數(shù)據(jù) query(),rawQuery()

查詢和添加案例

數(shù)據(jù)庫(kù)幫助類(lèi):

MainActivity:

Activity_main.xml:

SQLite數(shù)據(jù)庫(kù)

????????SQLite是一個(gè)輕量級(jí)的嵌入數(shù)據(jù)庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。您不需要在系統(tǒng)中安裝配置。SQLite 引擎不是一個(gè)獨(dú)立的進(jìn)程,可以按應(yīng)用程序需求進(jìn)行靜態(tài)或動(dòng)態(tài)連接。SQLite 直接訪問(wèn)其存儲(chǔ)文件

在Android中的使用

????????Android為了讓用戶能夠更加方便地管理數(shù)據(jù)庫(kù),專(zhuān)門(mén)提供了一個(gè) SQLiteOpenHelper幫助類(lèi),借助這個(gè)類(lèi)就可以非常簡(jiǎn)單地對(duì)數(shù)據(jù)庫(kù)進(jìn)行創(chuàng)建。SQLiteOpenHelper是一個(gè)抽象類(lèi),這意味著如果想使用它的話,這就需要自己 創(chuàng)建一個(gè)類(lèi)去繼承SQLiteOpenHelper幫助類(lèi)就可以了

class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version
??????????????? : Int) : SQLiteOpenHelper(context,name,factory,version) {
}

????????SQLiteOpenHelper有三個(gè)構(gòu)造方法可供重寫(xiě),一般使用參數(shù)少點(diǎn)的那個(gè)構(gòu)造方 法即可,必須要有它才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這個(gè)構(gòu)造方法中,接受4個(gè)參數(shù)

SQLite數(shù)據(jù)庫(kù)

Cursor游標(biāo)結(jié)果集

????????游標(biāo)是一段私有的SQL工作區(qū),即一段內(nèi)存區(qū)域,用于暫時(shí)存放受SQL語(yǔ)句影響到的數(shù)據(jù)。通俗理解就是將受影響的數(shù)據(jù)暫時(shí)存放到一個(gè)內(nèi)存區(qū)域的虛表中,這個(gè)虛表就是游標(biāo)。

????????游標(biāo)在數(shù)據(jù)庫(kù)的事務(wù)回滾中有非常重要的作用。由于對(duì)數(shù)據(jù)庫(kù)的操作會(huì)暫時(shí)存放在游標(biāo)中,只要不提交,就可以根據(jù)游標(biāo)中的內(nèi)容進(jìn)行回滾。這樣有利于數(shù)據(jù)庫(kù)的安全。

SQLiteOpenHelper中的方法

SQLite數(shù)據(jù)庫(kù)

????????SQLiteOpenHelper? 有兩個(gè)抽象方法 onCreate() onUpgrade()。我們必須在自己的幫助類(lèi)中重寫(xiě)這兩個(gè)方法。除外,其中還有兩個(gè)重要的實(shí)例方法getReadableDatabase()getWritableDatabase()。

????????這兩個(gè)方法都可以創(chuàng)建或打開(kāi)一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)(如果一個(gè)數(shù)據(jù)庫(kù)存在則直接打開(kāi),否則新建一個(gè)新的數(shù)據(jù)庫(kù)),并返回一個(gè)可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀 [寫(xiě)] 操作的對(duì)象。不同的是:當(dāng)數(shù)據(jù)庫(kù)不可寫(xiě)入(如磁盤(pán)空間滿時(shí)),getReadableDatabase()返回的對(duì)象是將以只讀方式打開(kāi)數(shù)據(jù)庫(kù),另一個(gè)會(huì)拋出一個(gè)異常

class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version: Int)
???????????????????????????????? : SQLiteOpenHelper(context,name,factory,version) {
??? //創(chuàng)建數(shù)據(jù)庫(kù)
??? override fun onCreate(db: SQLiteDatabase?) {
??????? //可能為null要用空安全操作 >>> ?.
??????? db?.execSQL("create table stu_info(" +
??????????????? "id INTEGER primary key autoincrement," +
??????????????? "sex varchar(10)," +
??????????????? "name varchar(20))")
??? }
??? //升級(jí)數(shù)據(jù)庫(kù)
??? override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
??? }
}

增刪改查

????????對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表的操作,一共有四種:添加、查詢、更新、刪除。每一種 操作又各自對(duì)應(yīng)了一種SQL命令:insert(添加),select(查詢),update(更新),delete(刪除)。

添加數(shù)據(jù) insert()

SQLite數(shù)據(jù)庫(kù)

方法有三個(gè)參數(shù)

  1. 第一個(gè)參數(shù)表名
  1. 第二個(gè)參數(shù)是某些為空的列自動(dòng)賦值
  1. 第三個(gè)參數(shù)是ContentValue對(duì)象,它提供了一系列put()方法重載,用于向ContentValues中添加對(duì)象,只需要將表中的每個(gè)列名以及相應(yīng)的待添加的數(shù) 據(jù)傳入即可。

查詢數(shù)據(jù) query(),rawQuery()

  1. query(表名, 要查詢出來(lái)的列名, 查詢條件, 對(duì)應(yīng)于selection語(yǔ)句中占位符的值, groupBy, having, orderBy, limit)
  1. rawQuery(sql語(yǔ)句, String[ ]? 是?的條件參數(shù),如果?這個(gè)內(nèi)占位符容為null的話就表示把所有的都查出來(lái))

查詢和添加案例

創(chuàng)建stu_db數(shù)據(jù)庫(kù)和stu_info學(xué)生表,對(duì)表進(jìn)行添加和動(dòng)態(tài)查詢操作,效果圖:

SQLite數(shù)據(jù)庫(kù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413695.html

數(shù)據(jù)庫(kù)幫助類(lèi):

class MyDBOpenHelper(context:Context)
???????????????????????????????? : SQLiteOpenHelper(context,"stu_db",null,1) {
??? //創(chuàng)建數(shù)據(jù)庫(kù)
??? override fun onCreate(db: SQLiteDatabase?) {
??????? //db要用空安全操作?.
??????? db?.execSQL("create table stu_info(" +
??????????????? "id INTEGER primary key autoincrement," +
??????????????? "sex varchar(10)," +
??????????????? "name varchar(20))")
??? }

??? //升級(jí)數(shù)據(jù)庫(kù)
??? override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
??? }
}

MainActivity

class MainActivity : AppCompatActivity() {
??? private var result = "" //反饋文本字符串
??? private var myDBHelper:SQLiteOpenHelper?= null//定義數(shù)據(jù)庫(kù)幫助類(lèi)對(duì)象
??? private var db:SQLiteDatabase?=null//定義一個(gè)可以操作的數(shù)據(jù)庫(kù)對(duì)象
??? override fun onCreate(savedInstanceState: Bundle?) {
??????? super.onCreate(savedInstanceState)
??????? setContentView(R.layout.activity_main)
??????? initView() //初始化方法
??????? butAdd() //添加按鈕監(jiān)聽(tīng)器
??????? butQuery() // 查詢按鈕監(jiān)聽(tīng)器
??? }
??? //初始化方法
??? fun initView(){
??????? myDBHelper = MyDBOpenHelper(this)//實(shí)例化數(shù)據(jù)庫(kù)幫助類(lèi)
??????? db = myDBHelper?.writableDatabase //創(chuàng)建獲取可讀寫(xiě)操作的數(shù)據(jù)庫(kù)
??? }
??? //添加按鈕監(jiān)聽(tīng)器
??? fun butAdd(){
??????? insert?.setOnClickListener {
??????????? var contentValues = ContentValues() //用 contentValue 表示一行
??????????? //把輸入的id,name,sex放到對(duì)應(yīng)的列
??????????? contentValues.put("id",idText.text.toString())
??????????? contentValues.put("name",nameText.text.toString())
??????????? contentValues.put("sex",sexText.text.toString())
??????????? //調(diào)用insert()添加
??????????? var insert = db?.insert("stu_info", null, contentValues)
???? ???????//提示框
??????????? if(insert!=null){
??????????????? Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show()
??????????? }else{
??????????????? Toast.makeText(this,"添加失??!",Toast.LENGTH_SHORT).show()
??????????? }
??????? }
??? }
??? // 查詢按鈕監(jiān)聽(tīng)器
??? fun butQuery(){
??????? query?.setOnClickListener {
?????????? var paramName:String = "id" //定義查詢條件,默認(rèn)根據(jù)id查詢
??????????? var arrayOf = arrayOf<String?>(null) //查詢條件參數(shù)數(shù)組
??????????? //如果id未輸入根據(jù) name查 ?: sex查
??????????? if (idText?.text.toString()!=""){
????? ??????????arrayOf[0]=idText?.text.toString() //獲取id框數(shù)據(jù),放入數(shù)組
?????????? }else if(nameText?.text.toString()!=""){
?????????????? paramName = "name"
??????????????? arrayOf[0]=nameText?.text.toString()//獲取name框數(shù)據(jù),放入數(shù)組
?????????? }else if(sexText?.text.toString()!=""){
?????????????? paramName = "sex"
??????????????? arrayOf[0]=sexText?.text.toString()//獲取sex框數(shù)據(jù),放入數(shù)組
?????????? }
??????????? //調(diào)用rawQuery傳入sql和參數(shù),獲取cursor結(jié)果集
??????????? var cursor = db?.rawQuery(
??????????????????? "select * from stu_info where ${paramName}=?" , arrayOf)
??????????? if (cursor?.count!=0){
??????????????? result = "" //清空結(jié)果反饋?zhàn)址???????????????? //遍歷結(jié)果集,追加反饋文本字符串
??????????????? while (cursor?.moveToNext() == true){
??????????????? ???result = "${result}\n" +
?"學(xué)號(hào):${cursor.getString(0)} 性別:${cursor.getString(1)} 姓名:${cursor.getString(2)}\n" +
??????????????????????????? ">>>>>>>>>>>"
??????????????? }
??????????????? tv.text = result//tv框打印反饋?zhàn)址???????????? }else{
??????????????? //如果結(jié)果集為空,tv打印對(duì)應(yīng)提示
??????????????? tv.text = "${paramName}=${arrayOf[0]},不存在"
??????????? }
??????? }
??? }
}

Activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
??? xmlns:app="http://schemas.android.com/apk/res-auto"
??? xmlns:tools="http://schemas.android.com/tools"
??? android:layout_width="match_parent"
??? android:layout_height="match_parent"
??? tools:context=".MainActivity"
??? android:orientation="vertical"
??? >

??? <TextView
??????? android:id="@+id/tv"
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content"
??????? android:gravity="center"
??????? android:text="(^-^)"
??????? android:textSize="20sp"
??????? android:layout_margin="40dp"
??????? android:layout_gravity="center"/>
??? <EditText
??????? android:hint="學(xué)號(hào):"
??????? android:id="@+id/idText"
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content" />
??? <EditText
??????? android:hint="姓名:"
???? ???android:id="@+id/nameText"
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content"/>
??? <EditText
??????? android:hint="性別:"
??????? android:id="@+id/sexText"
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content"/>
??? <LinearLayout
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content"
??????? android:orientation="horizontal"
??????? >
??????? <Button
??????????? android:id="@+id/insert"
??????????? android:layout_width="wrap_content"
??????????? android:layout_height="wrap_content"
??????????? android:text="添加"
??????????? android:textSize="25sp"
??????????? android:layout_margin="2dp"
??????????? android:layout_weight="1"
??????????? />
??????? <Button
??????????? android:id="@+id/clear"
??????????? android:layout_width="wrap_content"
??????????? android:layout_height="wrap_content"
??????????? android:text="清除"
??????????? android:textSize="25sp"
??????????? android:layout_margin="2dp"
??????????? android:layout_weight="1"
??????????? />
??? </LinearLayout>
??? <LinearLayout
??????? android:layout_width="match_parent"
??????? android:layout_height="wrap_content"
??????? android:orientation="horizontal">

??????? <Button
??????????? android:id="@+id/query"
??????????? android:layout_margin="3dp"
??????????? android:layout_weight="1"
??????????? android:text="查詢"
??????????? android:textSize="25sp"
??????????? android:layout_width="wrap_content"
??????????? android:layout_height="wrap_content"/>
??? </LinearLayout>
</LinearLayout>

到了這里,關(guān)于SQLite數(shù)據(jù)庫(kù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包