在我們學(xué)會了Android的基本使用之后就需要往高處發(fā)展了,畢竟水往高處流,很多時候我們學(xué)習(xí)一門技術(shù)感覺沒有收獲都是因為還沒到那個層次,當(dāng)你一步步往上走的時候就會漸漸發(fā)現(xiàn)自己收獲的越來越多,進(jìn)步也就會越來越快了,廢話不多說,回到正題;
1、認(rèn)識數(shù)據(jù)庫
安卓中的數(shù)據(jù)庫sqlite是一個微型的、跨平臺和弱類型的數(shù)據(jù)庫,他的體積很小,只有幾百kb,我們可以再Android的SDK文件夾下面找到他:
?其實和一些主流的數(shù)據(jù)庫mysql 不太一樣,他可以在一個列中存放不同的數(shù)據(jù)類型,但是它的sql語言是一樣的;
在這個位置我們可以打開cmd,然后輸入sqlite3,就可以執(zhí)行一個命令行的數(shù)據(jù)庫操作器,要注意的是他的一些命令是不一樣的,跟其他的數(shù)據(jù)庫比較起來,他創(chuàng)建或者打開數(shù)據(jù)庫使用的是.open,在每一個關(guān)于數(shù)據(jù)庫命令下面,都需要在前面加上一個點號,而在每一個sql命令下面都需要在后面加上一個分號;
.open StudentInfo
我記得sql server、MySQL打開數(shù)據(jù)庫都是use 數(shù)據(jù)庫名,但是這里不是這樣的,而且這個小點不能忘了;還有很多的數(shù)據(jù)庫命令,比如退出:
.exit
.quit
使用.table可以查看當(dāng)前數(shù)據(jù)庫下面的所有表;
pragma table_info(表名)
這個可以查看數(shù)據(jù)表結(jié)構(gòu);
對于sql語句的話相信大家都多多少少接觸過了,這里我就不過多贅述;
在我們安裝好了Android studio的時候其實就已經(jīng)自帶了這個數(shù)據(jù)庫,他用來存放一些簡單的數(shù)據(jù)還是沒有問題的;
2、使用數(shù)據(jù)庫
我們可以在網(wǎng)上下載一個sqlite的可視化工具可以看到數(shù)據(jù)庫里面的表: ?
很多數(shù)據(jù)庫都是擁有自己的可視化管理工具的,MySQL有navicat、sql server 有MMSM;
sqlite的就是sqlitestudio,安裝好之后我們就只需要將我們創(chuàng)建的數(shù)據(jù)庫拖動到這個程序里面他就會打開了:
· 創(chuàng)建幫助類
當(dāng)然我們只用sqlitestudio是沒有什么作用的,需要通過敲代碼的方式實現(xiàn)數(shù)據(jù)的增刪改查,Android提供了幾個類來幫助我們實現(xiàn)這些操作:
我們主要就了解兩個重要的類
1)、SQLiteOpenHelper
這是一個幫助抽象類,沒有實例,我們可以通過繼承的方式來實例化一個子類:
package com.example.apptest01;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SqliteHelper extends SQLiteOpenHelper {
private String CREATE_TABLE_STUDENTINFI="CREATE TABLE Users(" +
"userId integer primary key AutoIncrement, userName text,age integer,passWord text)";
public SqliteHelper(Context context){
//參數(shù):上下文、數(shù)據(jù)庫名、工廠類、版本
super(context,"StudentInfo.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_TABLE_STUDENTINFI);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
這個子類需要創(chuàng)建數(shù)據(jù)庫和繼承父類的構(gòu)造方法,首先需要寫一個構(gòu)造方法,將上下文傳進(jìn)去,super一下父類的構(gòu)造方法,然后就是接口方法oncreate,在里面執(zhí)行創(chuàng)建數(shù)據(jù)表的sql命令;
2)、SQLiteDatabase
這是sql實現(xiàn)增刪改查的工具類,可以通過這個類下面的方法來實現(xiàn)sql操作,但是這個類需要通過幫助類get到:
sqliteHelper = new SqliteHelper(this);
sqLiteDatabasewriter = sqliteHelper.getWritableDatabase();
sqLiteDatabaseReader = sqliteHelper.getReadableDatabase();
//條件刪除
sqLiteDatabasewriter.delete("Users","userId=?",new String[]{id+""});
//修改
sqLiteDatabasewriter.update("Users",contentValues,"userId=?",new String[]{cid});
//添加
sqLiteDatabasewriter.insert("Users",null,contentValues);
//查詢
sqLiteDatabasewriter.query("Users",null,"userId=?",new String[]{arrayList.get(i)+""},
· 查詢
那么我們知道了通過創(chuàng)建幫助類來創(chuàng)建執(zhí)行類,然后使用執(zhí)行類就可以實現(xiàn)數(shù)據(jù)的增刪改查,這里我們先通過查詢來講解一下具體的實現(xiàn)過程:
cursor = sqLiteDatabasewriter.query("Users",null,"userId=?",new String[]{arrayList.get(i)+""},
null,null,null);
if(cursor.moveToNext()){
id = cursor.getInt(cursor.getColumnIndex("userId"));
name = cursor.getString(cursor.getColumnIndex("userName"));
pwd = cursor.getString(cursor.getColumnIndex("passWord"));
age = cursor.getInt(cursor.getColumnIndex("age"));
}
我們獲取操作類的方法有兩個,一個是reader一個是writer,這里既然是查詢數(shù)據(jù)我們用reader就可以,當(dāng)然使用writer也是無傷大雅;
使用query方法進(jìn)行數(shù)據(jù)的查詢,他有一些參數(shù),第一個是表名,第二個列名,還是看這個明白一點:
有分組,分頁,排序,篩選,很多參數(shù),但是一般我們就是用到選項selection和表名就可以了;
他的返回值是一個cursor游標(biāo)對象,相當(dāng)于一個指針,可以通過while遍歷的方式來獲取到查詢到的結(jié)果集;
關(guān)于cursor對象我們需要清楚他的兩個方法,get類型() 和 getColumnIndex("列名"),前者的作用是通過后者的返回值實現(xiàn)查詢到具體的數(shù)據(jù),后者是通過列名查詢到記錄對應(yīng)的索引,也就是說兩者結(jié)合使用就可以實現(xiàn)查詢到具體的數(shù)據(jù),當(dāng)然這個是需要咋while遍歷里面實現(xiàn)的;
· 添加
添加數(shù)據(jù)同樣結(jié)合這操作類的使用:
ContentValues contentValues = new ContentValues();;
contentValues.clear();
contentValues.put("userId",et_id.getText().toString());
contentValues.put("userName",et_name.getText().toString());
contentValues.put("passWord",et_password.getText().toString());
contentValues.put("age",et_age.getText().toString());
long result = sqLiteDatabasewriter.insert("Users",null,contentValues);
if(result == 1){
Toast.makeText(this,"記錄完成",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"記錄失敗",Toast.LENGTH_LONG).show();
}
showData();
arrayAdapter.notifyDataSetChanged();
這里又使用了一個新的對象,就是ContentValues 這個對象用于存放鍵值對,通過put方法,存放著與數(shù)據(jù)表中列名對應(yīng)的數(shù)據(jù),然后將其使用操作類的insert方法就可以將數(shù)據(jù)成功添加到數(shù)據(jù)表中了;
這里需要注意insert的三個參數(shù),第一個是表名,第二個一般為null,第三個就是鍵值對數(shù)據(jù)了,這類統(tǒng)一使用contentvalues對象;
· 刪除
刪除操作也是結(jié)合這操作類使用:
sqLiteDatabasewriter.delete("Users","userId=?",new String[]{id+""});
?這里要注意如何使用選項的問題whereClause其實就是條件,在sql里面對應(yīng)的就是where,可以使用占位符?的方式,然后后面new String[]{}傳參,也可以一步到位;
· 適配器復(fù)習(xí)
這里需要復(fù)習(xí)一下適配器,我們適配器是用來將數(shù)據(jù)顯示到界面上的,那么當(dāng)數(shù)據(jù)改變是我們?nèi)绾嗡⑿嘛@示呢?
arrayAdapter.notifyDataSetChanged();
只需要調(diào)用一下這個方法,記住存放數(shù)據(jù)的對象可是一個全局變量;
我們大概使用到數(shù)據(jù)庫的操作就這些,當(dāng)然是使用的比較多的增刪改查,為什么要使用適配器呢?文章來源:http://www.zghlxwxcb.cn/news/detail-498289.html
還記得之前我們講過適配器嗎,它是用來將數(shù)據(jù)顯示到頁面上的,因為我們從數(shù)據(jù)庫中拿到數(shù)據(jù)之后終究是需要顯示到頁面上,所以數(shù)據(jù)庫是必不可少的一個對象;文章來源地址http://www.zghlxwxcb.cn/news/detail-498289.html
到了這里,關(guān)于Android 進(jìn)階 1、sqlite數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!