免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
android SQLite數(shù)據(jù)庫在Android中的API

上次我向大家介紹了SQLite的基本信息和使用過程,相信朋友們對SQLite已經(jīng)有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite。
現(xiàn)在的主流移動(dòng)設(shè)備像Android、iPhone等都使用SQLite作為復(fù)雜數(shù)據(jù)的存儲(chǔ)引擎,在我們?yōu)橐苿?dòng)設(shè)備開發(fā)應(yīng)用程序時(shí),也許就要使用到SQLite來存儲(chǔ)我們大量的數(shù)據(jù),所以我們就需要掌握移動(dòng)設(shè)備上的SQLite開發(fā)技巧。對于Android平臺(tái)來說,系統(tǒng)內(nèi)置了豐富的API來供開發(fā)人員操作SQLite,我們可以輕松的完成對數(shù)據(jù)的存取。

一 、SQLiteOpenHelper
可以直接使用SQLiteDataBase直接去創(chuàng)建數(shù)據(jù)庫,但是Android提供了一種更加安全優(yōu)雅的方式去操作數(shù)據(jù)庫,那就是SQLiteOpenHelper。SQLiteOpenHelper是用來管理數(shù)據(jù)庫的一個(gè)工具類,可以用于管理數(shù)據(jù)庫的創(chuàng)建和版本更新。
SQLiteOpenHelper是一個(gè)抽象類,所以要?jiǎng)?chuàng)建它的子類,重寫它的方法來使用它創(chuàng)建和管理數(shù)據(jù)庫。
子類繼承SQLiteOpenHelper的方法,必須重寫下面兩個(gè)方法:

1public abstract void onCreate(SQliteDatabase db);
2public abstract void onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);

SQLiteOpenHelper會(huì)自動(dòng)檢測數(shù)據(jù)庫文件是否存在。如果存在,會(huì)打開這個(gè)數(shù)據(jù)庫,在這種情況下就不會(huì)調(diào)用onCreate()方法。如果數(shù)據(jù)庫文件不存在,SQLiteOpenHelper首先會(huì)創(chuàng)建一個(gè)數(shù)據(jù)庫文件,然后打開這個(gè)數(shù)據(jù)庫,最后調(diào)用onCreate()方法。因此,onCreate()方法一般用來在新創(chuàng)建的數(shù)據(jù)庫中建立表、視圖等數(shù)據(jù)庫組建。也就是說oncreate()方法在數(shù)據(jù)庫文件第一次創(chuàng)建時(shí)調(diào)用。
先看看SQLiteOpenHelper類的構(gòu)造方法再解釋onUpdate()方法何時(shí)會(huì)被調(diào)用。
public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version);
其中name參數(shù)表示數(shù)據(jù)庫文件名(不包括文件路徑),SQLiteOpenHelper會(huì)根據(jù)這個(gè)文件名創(chuàng)建數(shù)據(jù)庫文件。version表示數(shù)據(jù)庫的版本號(hào)。如果當(dāng)前傳入的數(shù)據(jù)庫版本號(hào)比上次創(chuàng)建或升級(jí)的版本號(hào)高,SQLiteOpenHelper就會(huì)調(diào)用onUpdate()方法。也就是說,當(dāng)數(shù)據(jù)庫第一次創(chuàng)建時(shí)會(huì)有一個(gè)初始的版本號(hào)。當(dāng)需要對數(shù)據(jù)庫中的表、視圖等組建升級(jí)時(shí)可以增大版本號(hào),再重新創(chuàng)建它們?,F(xiàn)在總結(jié)一下oncreate()和onUpdate()調(diào)用過程。
1.如果數(shù)據(jù)庫文件不存在,SQLiteOpenHelper在自動(dòng)創(chuàng)建數(shù)據(jù)庫后會(huì)調(diào)用oncreate()方法,在該方法中一般需要?jiǎng)?chuàng)建表、視圖等組件。在創(chuàng)建前數(shù)據(jù)庫一般是空的,因此不需要先刪除數(shù)據(jù)庫中相關(guān)的組件。
2.如果數(shù)據(jù)庫文件存在,并且當(dāng)前版本號(hào)高于上次創(chuàng)建或升級(jí)的版本號(hào),SQLiteOpenHelper會(huì)調(diào)用onUpdate()方法,調(diào)用該方法后會(huì)更新數(shù)據(jù)庫的版本號(hào)。在onupdate()方法中除了創(chuàng)建表、視圖等組件外,還需要先刪除這些相關(guān)的組件,因此,在調(diào)用onupdate()方法前,數(shù)據(jù)庫是存在的,里面還原許多數(shù)據(jù)庫組建。
綜合上述兩點(diǎn),可以得出一個(gè)結(jié)論。如果數(shù)據(jù)庫文件不存在,只有oncreate()被調(diào)用(該方法在創(chuàng)建數(shù)據(jù)庫時(shí)被調(diào)用一次)。如果數(shù)據(jù)庫文件存在,會(huì)調(diào)用onupdate()方法升級(jí)數(shù)據(jù)庫,并更新版本號(hào)。

除了必須重寫這兩個(gè)方法外,還必須要一個(gè)構(gòu)造方法:
SQLiteOpenHelper提供了兩個(gè)構(gòu)造方法:
1、public SQLiteOpenHelper(Context context,String name, SQLiteDatabase.CursorFactory factory, int version)
創(chuàng)建一個(gè)helper對象,用于管理數(shù)據(jù)庫。
參數(shù):
context : Context對象,用于去打開或創(chuàng)建一個(gè)數(shù)據(jù)庫
name : 數(shù)據(jù)庫名稱
factory : 游標(biāo)工廠,用于創(chuàng)建一個(gè)游標(biāo)對象,如果使用null,則使用默認(rèn)的游標(biāo)
version : 數(shù)據(jù)庫版本號(hào),從1開始。如過版本號(hào)提升了,那么就去調(diào)用onUpgrade(SQLiteDatabase, int, int)方法。如過版本號(hào)降低了,那么就去調(diào)用onDowngrade(SQLiteDatabase, int, int)方法。
2、public SQLiteOpenHelper(Context context,String name, SQLiteDatabase.CursorFactory factory, int version,DatabaseErrorHandler errorHandler)
創(chuàng)建一個(gè)helper對象,用于管理數(shù)據(jù)庫。
參數(shù):
context : Context對象,用于去打開或創(chuàng)建一個(gè)數(shù)據(jù)庫
name : 數(shù)據(jù)庫名稱
factory : 游標(biāo)工廠,用于創(chuàng)建一個(gè)游標(biāo)對象,如果使用null,則使用默認(rèn)的游標(biāo)
version : 數(shù)據(jù)庫版本號(hào),從1開始。如過版本號(hào)提升了,那么就去調(diào)用onUpgrade(SQLiteDatabase, int, int)方法。如過版本號(hào)降低了,那么就去調(diào)用onDowngrade(SQLiteDatabase, int, int)方法。
errorHandler :用于報(bào)告數(shù)據(jù)庫

SQLiteOpenHelper類當(dāng)然還有其他的方法,不過一般不需要我們?nèi)ブ貙憽?br>public synchronized void close() :關(guān)閉任何已經(jīng)打開的數(shù)據(jù)庫。
public String getDatabaseName() :返回打開的數(shù)據(jù)庫的名稱,就是構(gòu)造器指定的那個(gè)數(shù)據(jù)庫。
public synchronized SQLiteDatabase getReadableDatabase() :打開或者創(chuàng)建一個(gè)只讀的數(shù)據(jù)庫
public synchronized SQLiteDatabase getWriteableDatabase() :打開或者創(chuàng)建一個(gè)可讀寫的數(shù)據(jù)庫
public void onDowngrade(SQLiteDadabase db,int oldVersion,int newVersion) :數(shù)據(jù)庫版本號(hào)降低時(shí)調(diào)用
public void onOpen(SQLiteDatabase db) :數(shù)據(jù)庫打開時(shí)調(diào)用

如何使用SQLiteOpenHelper的子類,去創(chuàng)建和管理數(shù)據(jù)庫:
1、使用構(gòu)造方法new一個(gè)helper對象
2、使用helper對象,調(diào)用getReadableDatabase()或getWriteableDatabase()方法返回一個(gè)SQLiteDatabase對象
3、使用SQLiteDatabase對象進(jìn)行數(shù)據(jù)庫操作。
舉個(gè)簡單的例子:
[html] view plaincopy

01public class DBHelper extends SQLiteOpenHelper {   
02 
03    private static final String DATABASE_NAME = "test.db";
04    private static final int DATABASE_VERSION = 1;   
05 
06    public DBHelper(Context context) {
07        //CursorFactory設(shè)置為null,使用默認(rèn)值
08        super(context, DATABASE_NAME, null, DATABASE_VERSION);
09    }   
10 
11    //數(shù)據(jù)庫第一次被創(chuàng)建時(shí)onCreate會(huì)被調(diào)用
12    @Override
13    public void onCreate(SQLiteDatabase db) {
14        db.execSQL("CREATE TABLE IF NOT EXISTS person" +
15                "(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER, info TEXT)");
16    }   
17 
18    //如果DATABASE_VERSION值被改為2,系統(tǒng)發(fā)現(xiàn)現(xiàn)有數(shù)據(jù)庫版本不同,即會(huì)調(diào)用onUpgrade
19    @Override
20    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
21        db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
22    }
23}

二 、SQLiteDatabase
SQLiteDatabase對象,代表的就是一個(gè)數(shù)據(jù)庫(底層就是一個(gè)數(shù)據(jù)庫文件)。我們可以調(diào)用SQLiteDatabase累的幾個(gè)靜態(tài)方法,來獲得一個(gè)數(shù)據(jù)庫對象。當(dāng)然,更好的方法是上面介紹的,使用SQLiteOpenHelper的子類來獲得一個(gè)SQLiteDatabase對象。

當(dāng)然,不管以什么方式獲得了SQLiteDatabase對象之后,我們就可以進(jìn)行數(shù)據(jù)庫的操作。大部分操作都類似于jdbc中的操作,很容易理解。
數(shù)據(jù)庫的操作無非CURD,對于 增 刪 改這三種情況,我們可以直接使用

1public void execSQL (String sql)
2public void execSQL (String sql, Object[] bindArgs)

這兩種方法,直接執(zhí)行標(biāo)準(zhǔn)的SQL語句,也可以用特定的方法來實(shí)現(xiàn),不過對于熟悉SQL語言的人來說,還是使用前一種方法比較直接。

至于查詢情況,就要復(fù)雜一點(diǎn),我們也可以直接使用
public Cursor rawQuery(String sql,String[] selectionArgs)
方法,直接執(zhí)行標(biāo)準(zhǔn)的SQL查詢語句。當(dāng)然,和增刪改一樣,也可以用特定的方法來實(shí)現(xiàn)。
不對用什么方法進(jìn)行查詢,都會(huì)將結(jié)果集作為一個(gè)Cursor游標(biāo)對象返回。Cursor對象類是以jdbc中的ResultSet對象。
下面是Cursor對象的常用方法:
[html] view plaincopy

01//假設(shè)c是一個(gè)返回的Cursor對象
02c.move(int offset); //以當(dāng)前位置為參考,移動(dòng)到指定行
03c.moveToFirst();    //移動(dòng)到第一行
04c.moveToLast();     //移動(dòng)到最后一行
05c.moveToPosition(int position); //移動(dòng)到指定行
06c.moveToPrevious(); //移動(dòng)到前一行
07c.moveToNext();     //移動(dòng)到下一行
08c.isFirst();        //是否指向第一條
09c.isLast();     //是否指向最后一條
10c.isBeforeFirst();  //是否指向第一條之前
11c.isAfterLast();    //是否指向最后一條之后
12c.isNull(int columnIndex);  //指定列是否為空(列基數(shù)為0)
13c.isClosed();       //游標(biāo)是否已關(guān)閉
14c.getCount();       //總數(shù)據(jù)項(xiàng)數(shù)
15c.getPosition();    //返回當(dāng)前游標(biāo)所指向的行數(shù)
16c.getColumnIndex(String columnName);//返回某列名對應(yīng)的列索引值
17c.getString(int columnIndex);   //返回當(dāng)前行指定列的值  string類型
18p;   c.getInt(int columnIndex);   //返回當(dāng)前行指定列的值  int類型
19c.getFloat(int columnIndex);   //返回當(dāng)前行指定列的值  float類型

關(guān)于更多的Cursor信息,可以參考官方文檔中的說明。要想熟練的使用,還是得多多練習(xí)。

三、事務(wù)的概念
SQLite數(shù)據(jù)庫也使用了事務(wù)的處理方法,SQLiteDatabase類也提供了事務(wù)處理的API。
使用beginTransaction()方法開啟一個(gè)事務(wù),然后執(zhí)行數(shù)據(jù)庫操作,然后調(diào)用setTransactionSuccessful()方法設(shè)置事務(wù)成功標(biāo)志。使用endTransaction結(jié)束提交事務(wù)。
還可以使用inTransaction()方法判斷是否處于一個(gè)事務(wù)中。
下面幾個(gè)例子說明:
[html] view plaincopy

01public void payment()
02{
03   SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
04   //開啟事務(wù)
05   db.beginTransaction();
06   try
07   {
08       //執(zhí)行數(shù)據(jù)庫操作
09       db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1});
10       db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2});
11       //設(shè)置事務(wù)標(biāo)志為成功,當(dāng)結(jié)束事務(wù)時(shí)就會(huì)提交事務(wù)
12       db.setTransactionSuccessful();
13   }
14   catch(Exception e){
15       throw(e);
16   }
17   finally
18   {
19       //結(jié)束事務(wù)
20       db.endTransaction();
21   }
22}

最后:關(guān)于SQLiteDatabase的使用流程基本介紹完了,下面在介紹SQLite中數(shù)據(jù)庫的操作和數(shù)據(jù)集返回如何處理。

分享文章0   
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
android SQLite數(shù)據(jù)庫事務(wù)操作 | 書籍信息分享
SQLite
6.3.1 數(shù)據(jù)存儲(chǔ)與訪問之
Android 數(shù)據(jù)存儲(chǔ)總結(jié)-數(shù)據(jù)庫SQLite的具體使用(附參考代碼)
android sqlite
Android數(shù)據(jù)庫高手秘籍(二)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服