SQLite筆記梳理

SQLite,輕量級(jí)數(shù)據(jù)庫(kù),非常適用于安卓的使用。

關(guān)于數(shù)據(jù)庫(kù)在安卓中的使用,主要包括以下幾點(diǎn):1、數(shù)據(jù)庫(kù)的創(chuàng)建與更新;2、數(shù)據(jù)庫(kù)的增加、修改、刪除;3、數(shù)據(jù)庫(kù)的查詢。之所以把數(shù)據(jù)庫(kù)的查詢也做為一點(diǎn),是因?yàn)樗牟樵兿鄬?duì)而言較為復(fù)雜。


一、數(shù)據(jù)庫(kù)的創(chuàng)建與更新

數(shù)據(jù)庫(kù)的創(chuàng)建依賴于SQLIteOpenHelper類(lèi),需要自己創(chuàng)建類(lèi)繼承該類(lèi),而該類(lèi)需要實(shí)現(xiàn)onCreate(),onUpgrade()以及一個(gè)構(gòu)造方法。

其中一般用的構(gòu)造方法需要用到四個(gè)參數(shù),一個(gè)是context,一個(gè)是數(shù)據(jù)庫(kù)的名字,一個(gè)是版本號(hào),一個(gè)只要寫(xiě)ull就可以了。有人直接將四個(gè)參數(shù)都作為自己的類(lèi)的構(gòu)造方法的參數(shù),而我在考慮后不建議如此;將數(shù)據(jù)庫(kù)的名字和版本號(hào)直接定義在自己創(chuàng)建的類(lèi)中,方便日后的升級(jí)等,參數(shù)只需要傳入context即可。

而在onCreate()方法中,則是對(duì)數(shù)據(jù)表的建立,這是較為簡(jiǎn)單的。語(yǔ)言如下:

create table tableName(字段名 ?字段屬性 ?[是否為主鍵] ?[是否自增],[字段名······])

最后使用db.execSQL(sql);來(lái)完成創(chuàng)建;

而在onUpgrade()方法中,就更為簡(jiǎn)單了,先刪除之前的數(shù)據(jù)表,再創(chuàng)建。如下:

db.execSQL("drop table if exists tableName");

onCreate(db);

為了方便,有人將表名、字段名定義在一個(gè)類(lèi)中,這就看個(gè)人喜歡了。參考代碼:

最后有一個(gè)在Activity中使用getWritableDatabase()或者getReadableDatabase()方法來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)創(chuàng)建;

private SQLiteDatabase database;

database = new CrimeBaseHelper(context).getWritableDatabase();


二、數(shù)據(jù)庫(kù)的增加、修改、刪除

數(shù)據(jù)庫(kù)的增、刪、改是較為簡(jiǎn)單的,而且有兩種方法,一種是android自帶的,另外一種是用sql語(yǔ)言來(lái)實(shí)現(xiàn),用什么也都是看自己的喜歡。

增加:

Android:使用ContentValues來(lái)封裝數(shù)據(jù)

ContentValues values = new ContentValues();

values.put(name,value);(保存多少數(shù)據(jù)都是這樣put進(jìn)去)

database.insert(tableName,null,values);//database是之間getWritableDatabase()得到的數(shù)據(jù)庫(kù)插入即可。

SQL方法:

database.execSQL("insert into tableName (字段名1,字段名2...) ?values (?,?,?)",new String[]{value1,value2...});

修改:

android方法:同意用ContentValues封裝數(shù)據(jù)

database.update(tableName,values,"條件(如:name=?)",new String[]{value});

SQL方法:

database.execSQL("update tableName set name = ? where name = ?",new String[]{value,value});

刪除:

Android方法:

database.delete(tableName,"條件(如:id>?)",new String[]{value});

SQL方法:

database.execSQL("delete from tableName where id > ?",new String[]{value});

總的來(lái)說(shuō),增刪改是比較簡(jiǎn)單的,但是在使用的時(shí)候要充分考慮代碼的重用性。這點(diǎn)要在摸索中前進(jìn)。


查詢

相對(duì)來(lái)說(shuō),查詢是較為復(fù)雜的,他需要用到一個(gè)叫做Cursor的東西,這個(gè)翻譯過(guò)來(lái)叫游標(biāo)。

查詢使用database.query()來(lái)進(jìn)行查詢得到一個(gè)Cursor類(lèi)型的數(shù)據(jù),其中query有7個(gè)參數(shù),依次分別為:

table(字符串類(lèi)型,表名),

columns(字符數(shù)組類(lèi)型,列名,為null時(shí)則查詢?nèi)?,

selection(相當(dāng)于where語(yǔ)句,查詢的條件,字符串類(lèi)型,如name=?)

selectionArg(條件查詢中占位符的值,字符串?dāng)?shù)組類(lèi)型),

groupby(分組字段,String類(lèi)型),

having(分組后的條件,字符串類(lèi)型),

orderBy(排序字段,字符串類(lèi)型)。

得到Cursor數(shù)據(jù)類(lèi)型之后,可以對(duì)Cursor數(shù)據(jù)進(jìn)行處理??梢耘袛郼ursor是否有下一個(gè)數(shù)據(jù),然后用moveToNext()移動(dòng)到下一個(gè)游標(biāo)等。而將cursor數(shù)據(jù)解析成自己想要的數(shù)據(jù)則通過(guò):

cursor.getString/Int...(cursor.getColumnIndex(字段名))來(lái)獲取。為了代碼重用,可以將建立一個(gè)wrapper類(lèi)extends? CursorWrapper,在其中實(shí)現(xiàn)getColumnIndex()等。

SQL方法:

SQL方法得到的也是一個(gè)Cursor數(shù)據(jù),但感覺(jué)比原生的Android方法要簡(jiǎn)單,所以我個(gè)人反而是比較推薦這個(gè)方法,如下:

Cursor cursor = database.rawQuery("select * from Book where name = ?",new String[]{value});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容