




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android連接數(shù)據(jù)庫(kù)d采用關(guān)系型數(shù)據(jù)庫(kù)3L輕量級(jí)的嵌入式數(shù)據(jù)庫(kù),在嵌入式操作上有很廣泛的,WMSQLite3SQLite3,那這就是你要找的文章!首先,我們看一下api,所有數(shù)據(jù)庫(kù)相關(guān)的接口、類都在.database和android.database.sqlite兩個(gè)包下,雖然只有兩個(gè)包,但是如果你英文不好或是太懶的話也要迷茫一段時(shí)間,其實(shí),我們真正用的到的沒有幾個(gè)!1、SQLiteOpenHelper(android.database.sqlite.SQLiteOpenHelper)這是一個(gè)抽象類,關(guān)于抽象類我們都知道,如果要使用它,一定是繼承它!這個(gè)類的方法很少,有一個(gè)構(gòu)造方法SQLiteOpenHelper(android.content.Contextcontext,java.lang.Stringname,android.database.sqlite.SQLiteDatabase.CursorFactoryfactory,intversion);參數(shù)不做過多的解釋,CursorFactory一般直接傳null就可以publicvoidonCreate(SQLiteDatabasedb)此方法在創(chuàng)建數(shù)據(jù)庫(kù)是被調(diào)用,所以,應(yīng)該把創(chuàng)建表的操作放到這個(gè)方法里面,一會(huì)兒在后面我們會(huì)再詳細(xì)的說如何創(chuàng)建表publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)從方法名上我們就能知道這個(gè)方法是執(zhí)行更新的,沒錯(cuò),當(dāng)version改變是系統(tǒng)會(huì)調(diào)用這個(gè)方法,所以在這個(gè)方法里應(yīng)該執(zhí)行刪除現(xiàn)有表,然后手動(dòng)調(diào)用onCreate的操作SQLiteDatabasegetReadableDatabase()可讀的SQLiteDatabase對(duì)象SQLiteDatabasegetWritableDatabase()獲取可寫的SQLiteDatabase對(duì)象2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)關(guān)于操作數(shù)據(jù)庫(kù)的工作(增、刪、查、改)都在這個(gè)類里execSQL(sql)SQL語句,用這個(gè)方法+SQL除此之外,Android還提供了功過方法實(shí)現(xiàn)增、刪、查、改longinsert(TABLE_NAME,null,contentValues)添加記錄intdelete(TABLE_NAME,where,whereValue)刪除記錄intupdate(TABLE_NAME,contentValues,where,whereValue)更新記錄Cursorquery(TABLE_NAME,null,null,null,null,null,null)查詢記錄endTransaction()結(jié)束事務(wù)...api,這里就不多贅述了3、Cursor(android.database.Cursor)游標(biāo)(接口),這個(gè)很熟悉了吧,Cursor里的方法非常多,常用的有:booleanmoveToPosition(position)將指針移動(dòng)到某記錄getColumnIndex(Contacts.People.NAME)按列名獲取idintgetCount()獲取記錄總數(shù)booleanrequery()重新查詢booleanisAfterLast()指針是否在末尾booleanisBeforeFirst()時(shí)候是開始位置booleanisFirst()是否是第一條記錄booleanisLast()是否是最后一條記錄booleanmoveToFirst()、booleanmoveToLast()、booleanmoveToNext()同moveToPosition(position)4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)database和database.sqliteAdapterAndroid的SQLite3,你一定會(huì)知道,這是因?yàn)槲覀儗?duì)數(shù)據(jù)庫(kù)的操作會(huì)經(jīng)常跟列表聯(lián)系起來經(jīng)常有朋友會(huì)在這出錯(cuò),但其實(shí)也很簡(jiǎn)單SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.list,myCursor,newString[]{DB.TEXT1,DB.TEXT2},newint[]{R.id.list1,R.id.listText2});my.setAdapter(adapter);一共5個(gè)參數(shù),具體如下:參數(shù)1:Content參數(shù)2:布局參數(shù)3:Cursor游標(biāo)對(duì)象參數(shù)4:顯示的字段,傳入String[]參數(shù)5:顯示字段使用的組件,傳入int[],該數(shù)組中是TextView組件的id緒!前面的只是幫沒做過的朋友做下普及,下面才是你真正需要的!一、寫一個(gè)類繼承SQLiteOpenHelperpublicclassDatabaseHelperextendsSQLiteOpenHelper構(gòu)造方法:DatabaseHelper(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);}在onCreate方法里寫建表的操作publicvoidonCreate(SQLiteDatabasedb){Stringsql="CREATETABLEtb_test(_idINTEGERDEFAULT'1'NOTNULLPRIMARYKEYAUTOINCREMENT,class_jbTEXTNOTNULL,class_ysbjTEXTNOTNULL,titleTEXTNOTNULL,content_ysbjTEXTNOTNULL)";db.execSQL(sql);//需要異常捕獲}在onUpgrade方法里刪除現(xiàn)有表,然后手動(dòng)調(diào)用onCtreate創(chuàng)建表publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Stringsql="droptable"+tbname;db.execSQL(sql);onCreate(db);}對(duì)表增、刪、查、改的方法,這里用的是SQLiteOpenHelper提供的方法,也可以用sql語句實(shí)現(xiàn),都是一樣的關(guān)于獲取可讀/SQLiteDatabase/***添加數(shù)據(jù)*/publiclonginsert(Stringtname,inttage,Stringttel){SQLiteDatabasedb=getWritableDatabase();//獲取可寫SQLiteDatabase對(duì)象//ContentValues類似map,存入的是鍵值對(duì)ContentValuescontentValues=newContentValues();contentValues.put("tname",tname);contentValues.put("tage",tage);contentValues.put("ttel",ttel);returndb.insert(tbname,null,contentValues);}/**刪除記錄@param_id*/publicvoiddelete(String_id){SQLiteDatabasedb=getWritableDatabase();db.delete(tbname,"_id=?",newString[]{_id});}/**更新記錄的,跟插入的很像*/publicvoidupdate(String_id,Stringtname,inttage,Stringttel){SQLiteDatabasedb=getWritableDatabase();ContentValuescontentValues=newContentValues();contentValues.put("tname",tname);contentValues.put("tage",tage);contentValues.put("ttel",ttel);db.update(tbname,contentValues,"_id=?",newString[]{_id});}/**查詢所有數(shù)據(jù)@returnCursor*/publicCursorselect(){SQLiteDatabasedb=getReadableDatabase();returndb.query(tbname,newString[]{"_id","tname","tage","ttel","taddr"},null,null,null,null,"_iddesc");}db.query方法的參數(shù),有很多,為了防止大家弄亂,我簡(jiǎn)單說一下1:表名參數(shù)2:返回?cái)?shù)據(jù)包含的列信息,String數(shù)組里放的都是列名參數(shù)3:相當(dāng)于sql里的where,sql里where后寫的內(nèi)容放到這就行了,例如:tage>?43里寫了?(tage>?了吧),那個(gè)這里就是代替newString[]{"30"}參數(shù)5:分組,不解釋了,不想分組就傳null參數(shù)6:having,想不起來的看看SQL參數(shù)7:orderBy排序到這里,你已經(jīng)完成了最多的第一步!我們來看看都用到了那些類:SQLiteOpenHelper我們繼承使用的SQLiteDatabasesql語句,也要用到execSQL(sql)DatabaseHelper類定義方法的調(diào)用,沒什么可說的,不過我還是對(duì)查詢?cè)賴Z叨幾句吧Android查詢出來的結(jié)果一Cursor形式返回cursor=sqLiteHelper.select();//cursor=sqLiteHelper.select();//是不是很簡(jiǎn)單?cursorlistView中,這就要用到剛才提到的SimpleCursorAdapterSimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.list_row,cursor,newString[]{"tname","ttel"},newint[]{R.id.TextView01,R.id.TextView02});里面帶有實(shí)例。自己好好學(xué)習(xí)吧!SQLite介紹SQLiteSQL存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項(xiàng)目((Mozilla,PHP,Python)都使用了SQLite.SQLite由以下幾個(gè)組件組成:SQLSQLite利用虛擬機(jī)和虛擬數(shù)據(jù)庫(kù)引擎(VDBE),使調(diào)試、修改和擴(kuò)展SQLite得更加方便。圖1.SQLite內(nèi)部結(jié)構(gòu)SQLite基本上符合SQL-92SQL優(yōu)點(diǎn)就是高效,Android運(yùn)行時(shí)環(huán)境包含了完整的SQLite。SQLite和其他數(shù)據(jù)庫(kù)最大的不同就是對(duì)數(shù)據(jù)類型的支持,創(chuàng)建一個(gè)表時(shí),可以在CREATETABLE任何列中。當(dāng)某個(gè)值插入數(shù)據(jù)庫(kù)時(shí),SQLite將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則SQLite該值將作為其本身具有的類型存儲(chǔ)。比如可以把一個(gè)字符串(String)放入INTEGER列。SQLite稱這為“弱類型”(manifesttyping.)。此外,SQLite不支持一些標(biāo)準(zhǔn)的SQL功能,特別是外鍵約束(FOREIGNKEYconstrains),嵌套transcaction和RIGHTOUTERJOIN和FULLOUTER還有一些ALTERTABLE功能。是一個(gè)完整的SQL等?;仨?yè)首Android集成了SQLite數(shù)據(jù)庫(kù)Android集成了Android可以使用SQLiteSQLAndroid使用SQLiteJDBCJDBCAndroid提供了一些新的API使用SQLite數(shù)據(jù)庫(kù),Android開發(fā)中,程序員需要學(xué)使用這些API。數(shù)據(jù)庫(kù)存儲(chǔ)在data/<項(xiàng)目文件夾>/databases/下。回頁(yè)首Android開發(fā)中使用SQLite數(shù)據(jù)庫(kù)Activites可以通過ContentProvider或者Service訪問一個(gè)數(shù)據(jù)庫(kù)。下面會(huì)詳細(xì)講解如果創(chuàng)建數(shù)據(jù)庫(kù),添加數(shù)據(jù)和查詢數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)AndroidAndroid應(yīng)用程序中使用Android提供了SQLiteOpenHelperSQLiteOpenHelper據(jù)庫(kù)。SQLiteOpenHelper類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫(kù)使用的邏輯。SQLiteOpenHelper的子類,至少需要實(shí)現(xiàn)三個(gè)方法:SQLiteOpenHelper參數(shù):上下文環(huán)境(例如,一個(gè)Activity),數(shù)據(jù)庫(kù)名字,一個(gè)可選的游標(biāo)工廠(通常是Null),一個(gè)代表你正在使用的數(shù)據(jù)庫(kù)模型版本的整數(shù)。onCreate()方法,它需要一個(gè)SQLiteDatabase要對(duì)這個(gè)對(duì)象填充表和初始化數(shù)據(jù)。onUpgrage()SQLiteDatabase的模型轉(zhuǎn)變到新的模型。下面示例代碼展示了如何繼承SQLiteOpenHelper創(chuàng)建數(shù)據(jù)庫(kù):publicclassDatabaseHelperextendsSQLiteOpenHelper{DatabaseHelper(Contextcontext,Stringname,CursorFactorycursorFactory,intversion){super(context,name,cursorFactory,version);}@OverridepublicvoidonCreate(SQLiteDatabasedb){//TODO創(chuàng)建數(shù)據(jù)庫(kù)后,對(duì)數(shù)據(jù)庫(kù)的操作}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,newVersion){//TODO更改數(shù)據(jù)庫(kù)版本的操作}@OverridepublicvoidonOpen(SQLiteDatabasedb){super.onOpen(db);//TODO每次成功打開數(shù)據(jù)庫(kù)后首先被執(zhí)行}}接下來討論具體如何創(chuàng)建表、插入數(shù)據(jù)、刪除表等等。調(diào)用getReadableDatabase()或getWriteableDatabase()方法,你可以得到SQLiteDatabase實(shí)例,具體調(diào)用那個(gè)方法,取決于你是否需要改變數(shù)據(jù)庫(kù)的內(nèi)容:db=(newDatabaseHelper(getContext())).getWritableDatabase();return(db==null)?false:true;上面這段代碼會(huì)返回一個(gè)SQLiteDatabase查詢或者修改數(shù)據(jù)庫(kù)。當(dāng)你完成了對(duì)數(shù)據(jù)庫(kù)的操作(例如你的Activity已經(jīng)關(guān)閉),需要調(diào)用SQLiteDatabase的Close()方法來釋放掉數(shù)據(jù)庫(kù)連接。創(chuàng)建表和索引為了創(chuàng)建表和索引,需要調(diào)用SQLiteDatabase的execSQL()方法來執(zhí)行DDL語句。如果沒有異常,這個(gè)方法沒有返回值。例如,你可以執(zhí)行如下代碼:db.execSQL("CREATETABLEmytable(_idINTEGERPRIMARYKEYAUTOINCREMENT,titleTEXT,valueREAL);");這條語句會(huì)創(chuàng)建一個(gè)名為mytable的表,表有一個(gè)列名為_id,并且是主鍵,這列的值是會(huì)自動(dòng)增長(zhǎng)的整數(shù)(例如,當(dāng)你插入一行時(shí),SQLite會(huì)給這列自動(dòng)賦值),另外還有兩列:title(value(SQLite為主鍵列創(chuàng)建索引。通常情況下,第一次創(chuàng)建數(shù)據(jù)庫(kù)時(shí)創(chuàng)建了表和索引。如果你不需要改變表的execSQL()DROPINDEX和DROPTABLE語句。給表添加數(shù)據(jù)給表添加數(shù)據(jù)。像上面創(chuàng)建表一樣,你可以使用execSQL()方法執(zhí)行INSERT,UPDATE,等語句來更新表的數(shù)據(jù)。execSQL()方法適用于所有不返回結(jié)果的SQL語句。例如:db.execSQL("INSERTINTOwidgets(name,inventory)"+"VALUES('Sprocket',5)");另一種方法是使用SQLiteDatabase對(duì)象的insert(),update(),delete()法。這些方法把SQL語句的一部分作為參數(shù)。示例如下:ContentValuescv=newContentValues();cv.put(Constants.TITLE,"exampletitle");cv.put(Constants.VALUE,SensorManager.GRAVITY_DEATH_STAR_I);db.insert("mytable",getNullColumnHack(),cv);update()方法有四個(gè)參數(shù),分別是表名,表示列名和值的ContentValues對(duì)WHERE條件和可選的填充WHEREWHERE條件中的“?”標(biāo)記。update()根據(jù)條件,更新指定列的值,所以用execSQL()方法可以達(dá)到同樣的目的。WHERE條件和其參數(shù)和用過的其他SQLAPIs類似。例如:String[]parms=newString[]{"thisisastring"};db.update("widgets",replacements,"name=?",delete()方法的使用和update()WHERE的填充WHERE條件的字符串。查詢數(shù)據(jù)庫(kù)類似INSERT,UPDATE,DELETE,有兩種方法使用SELECT從SQLite數(shù)據(jù)庫(kù)檢索數(shù)據(jù)。1.使用rawQuery()直接調(diào)用SELECT語句;使用query()方法構(gòu)建一個(gè)查詢。RawQueries正如API以調(diào)用SQLSELECT語句。例如:Cursorc=db.rawQuery("SELECTnameFROMsqlite_masterWHEREtype='table'name='mytable'",null);SQLite(sqlite_master檢查tablecursor果。列在程序編譯的時(shí)候不能確定,這時(shí)候使用query()方法會(huì)方便很多。RegularQueriesquery()方法用SELECTSELECT語句內(nèi)容作為方法的參數(shù),比如:要查詢的表名,要獲取的字段名,WHERE除了表名,其他參數(shù)可以是null。所以,以前的代碼段可以可寫成:String[]columns={"ID","inventory"};String[]parms={"snicklefritz"};Cursorresult=db.query("widgets",columns,"name=?",parms,null,null);使用游標(biāo)Android的SQLite游標(biāo),使用游標(biāo),你可以:通過使用getCount()方法得到結(jié)果集中有多少記錄;通過moveToFirst(),moveToNext(),和isAfterLast()方法遍歷所有記錄;通過getColumnNames()得到字段名;通過getColumnIndex()轉(zhuǎn)換成字段號(hào);通過getString(),getInt()等方法得到給定字段當(dāng)前記錄的值;通過requery()方法重新執(zhí)行查詢得到游標(biāo);通過close()方法釋放游標(biāo)資源;例如,下面代碼遍歷mytable表Cursorresult=db.rawQuery("SELECTID,name,inventoryFROMmytable");result.moveToFirst();while(!resul
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年衛(wèi)生管理考試知識(shí)點(diǎn)考查試題及答案
- 法律法規(guī)對(duì)專利申請(qǐng)的影響試題及答案
- 教育學(xué)原理 試題及答案
- 文化產(chǎn)業(yè)產(chǎn)業(yè)發(fā)展動(dòng)態(tài)試題及答案分析
- 春節(jié)活動(dòng)測(cè)試題及答案
- 大學(xué)英語 -試題及答案
- 防詐騙安全培訓(xùn)
- 河南數(shù)學(xué)單招試題及答案
- 基礎(chǔ)護(hù)理試題庫(kù)及答案
- 公共衛(wèi)生服務(wù)均等化試題及答案
- 醫(yī)保業(yè)務(wù)培訓(xùn)大綱
- 中國(guó)職工保險(xiǎn)互助會(huì)陜西辦事處招聘考試真題2024
- 商鋪施工方案
- 北師大版2024-2025學(xué)年度第二學(xué)期一年級(jí)數(shù)學(xué)期中檢測(cè)(含答案)
- 江蘇省2024年中職職教高考文化統(tǒng)考烹飪專業(yè)綜合理論真題試卷
- (2024年)知識(shí)產(chǎn)權(quán)全套課件(完整)
- 檸檬茶項(xiàng)目財(cái)務(wù)數(shù)據(jù)分析(參考范文)
- 預(yù)制渡槽吊裝施工方案_圖文
- 國(guó)家開放大學(xué)《會(huì)計(jì)學(xué)概論》章節(jié)測(cè)試參考答案
- 小升初個(gè)人簡(jiǎn)歷表
- 集中空調(diào)衛(wèi)生檔案目錄
評(píng)論
0/150
提交評(píng)論