




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Android連接數(shù)據庫d采用關系型數(shù)據庫3L輕量級的嵌入式數(shù)據庫,在嵌入式操作上有很廣泛的,WMSQLite3SQLite3,那這就是你要找的文章!首先,我們看一下api,所有數(shù)據庫相關的接口、類都在.database和android.database.sqlite兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個!1、SQLiteOpenHelper(android.database.sqlite.SQLiteOpenHelper)這是一個抽象類,關于抽象類我們都知道,如果要使用它,一定是繼承它!這個類的方法很少,有一個構造方法SQLiteOpenHelper(android.content.Contextcontext,java.lang.Stringname,android.database.sqlite.SQLiteDatabase.CursorFactoryfactory,intversion);參數(shù)不做過多的解釋,CursorFactory一般直接傳null就可以publicvoidonCreate(SQLiteDatabasedb)此方法在創(chuàng)建數(shù)據庫是被調用,所以,應該把創(chuàng)建表的操作放到這個方法里面,一會兒在后面我們會再詳細的說如何創(chuàng)建表publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)從方法名上我們就能知道這個方法是執(zhí)行更新的,沒錯,當version改變是系統(tǒng)會調用這個方法,所以在這個方法里應該執(zhí)行刪除現(xiàn)有表,然后手動調用onCreate的操作SQLiteDatabasegetReadableDatabase()可讀的SQLiteDatabase對象SQLiteDatabasegetWritableDatabase()獲取可寫的SQLiteDatabase對象2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)關于操作數(shù)據庫的工作(增、刪、查、改)都在這個類里execSQL(sql)SQL語句,用這個方法+SQL除此之外,Android還提供了功過方法實現(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()結束事務...api,這里就不多贅述了3、Cursor(android.database.Cursor)游標(接口),這個很熟悉了吧,Cursor里的方法非常多,常用的有:booleanmoveToPosition(position)將指針移動到某記錄getColumnIndex(Contacts.People.NAME)按列名獲取idintgetCount()獲取記錄總數(shù)booleanrequery()重新查詢booleanisAfterLast()指針是否在末尾booleanisBeforeFirst()時候是開始位置booleanisFirst()是否是第一條記錄booleanisLast()是否是最后一條記錄booleanmoveToFirst()、booleanmoveToLast()、booleanmoveToNext()同moveToPosition(position)4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)database和database.sqliteAdapterAndroid的SQLite3,你一定會知道,這是因為我們對數(shù)據庫的操作會經常跟列表聯(lián)系起來經常有朋友會在這出錯,但其實也很簡單SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.list,myCursor,newString[]{DB.TEXT1,DB.TEXT2},newint[]{R.id.list1,R.id.listText2});my.setAdapter(adapter);一共5個參數(shù),具體如下:參數(shù)1:Content參數(shù)2:布局參數(shù)3:Cursor游標對象參數(shù)4:顯示的字段,傳入String[]參數(shù)5:顯示字段使用的組件,傳入int[],該數(shù)組中是TextView組件的id緒!前面的只是幫沒做過的朋友做下普及,下面才是你真正需要的!一、寫一個類繼承SQLiteOpenHelperpublicclassDatabaseHelperextendsSQLiteOpenHelper構造方法: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)有表,然后手動調用onCtreate創(chuàng)建表publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Stringsql="droptable"+tbname;db.execSQL(sql);onCreate(db);}對表增、刪、查、改的方法,這里用的是SQLiteOpenHelper提供的方法,也可以用sql語句實現(xiàn),都是一樣的關于獲取可讀/SQLiteDatabase/***添加數(shù)據*/publiclonginsert(Stringtname,inttage,Stringttel){SQLiteDatabasedb=getWritableDatabase();//獲取可寫SQLiteDatabase對象//ContentValues類似map,存入的是鍵值對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ù)據@returnCursor*/publicCursorselect(){SQLiteDatabasedb=getReadableDatabase();returndb.query(tbname,newString[]{"_id","tname","tage","ttel","taddr"},null,null,null,null,"_iddesc");}db.query方法的參數(shù),有很多,為了防止大家弄亂,我簡單說一下1:表名參數(shù)2:返回數(shù)據包含的列信息,String數(shù)組里放的都是列名參數(shù)3:相當于sql里的where,sql里where后寫的內容放到這就行了,例如:tage>?43里寫了?(tage>?了吧),那個這里就是代替newString[]{"30"}參數(shù)5:分組,不解釋了,不想分組就傳null參數(shù)6:having,想不起來的看看SQL參數(shù)7:orderBy排序到這里,你已經完成了最多的第一步!我們來看看都用到了那些類:SQLiteOpenHelper我們繼承使用的SQLiteDatabasesql語句,也要用到execSQL(sql)DatabaseHelper類定義方法的調用,沒什么可說的,不過我還是對查詢再嘮叨幾句吧Android查詢出來的結果一Cursor形式返回cursor=sqLiteHelper.select();//cursor=sqLiteHelper.select();//是不是很簡單?cursorlistView中,這就要用到剛才提到的SimpleCursorAdapterSimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.list_row,cursor,newString[]{"tname","ttel"},newint[]{R.id.TextView01,R.id.TextView02});里面帶有實例。自己好好學習吧!SQLite介紹SQLiteSQL存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla,PHP,Python)都使用了SQLite.SQLite由以下幾個組件組成:SQLSQLite利用虛擬機和虛擬數(shù)據庫引擎(VDBE),使調試、修改和擴展SQLite得更加方便。圖1.SQLite內部結構SQLite基本上符合SQL-92SQL優(yōu)點就是高效,Android運行時環(huán)境包含了完整的SQLite。SQLite和其他數(shù)據庫最大的不同就是對數(shù)據類型的支持,創(chuàng)建一個表時,可以在CREATETABLE任何列中。當某個值插入數(shù)據庫時,SQLite將檢查它的類型。如果該類型與關聯(lián)的列不匹配,則SQLite該值將作為其本身具有的類型存儲。比如可以把一個字符串(String)放入INTEGER列。SQLite稱這為“弱類型”(manifesttyping.)。此外,SQLite不支持一些標準的SQL功能,特別是外鍵約束(FOREIGNKEYconstrains),嵌套transcaction和RIGHTOUTERJOIN和FULLOUTER還有一些ALTERTABLE功能。是一個完整的SQL等?;仨撌譇ndroid集成了SQLite數(shù)據庫Android集成了Android可以使用SQLiteSQLAndroid使用SQLiteJDBCJDBCAndroid提供了一些新的API使用SQLite數(shù)據庫,Android開發(fā)中,程序員需要學使用這些API。數(shù)據庫存儲在data/<項目文件夾>/databases/下?;仨撌譇ndroid開發(fā)中使用SQLite數(shù)據庫Activites可以通過ContentProvider或者Service訪問一個數(shù)據庫。下面會詳細講解如果創(chuàng)建數(shù)據庫,添加數(shù)據和查詢數(shù)據庫。創(chuàng)建數(shù)據庫AndroidAndroid應用程序中使用Android提供了SQLiteOpenHelperSQLiteOpenHelper據庫。SQLiteOpenHelper類根據開發(fā)應用程序的需要,封裝了創(chuàng)建和更新數(shù)據庫使用的邏輯。SQLiteOpenHelper的子類,至少需要實現(xiàn)三個方法:SQLiteOpenHelper參數(shù):上下文環(huán)境(例如,一個Activity),數(shù)據庫名字,一個可選的游標工廠(通常是Null),一個代表你正在使用的數(shù)據庫模型版本的整數(shù)。onCreate()方法,它需要一個SQLiteDatabase要對這個對象填充表和初始化數(shù)據。onUpgrage()SQLiteDatabase的模型轉變到新的模型。下面示例代碼展示了如何繼承SQLiteOpenHelper創(chuàng)建數(shù)據庫:publicclassDatabaseHelperextendsSQLiteOpenHelper{DatabaseHelper(Contextcontext,Stringname,CursorFactorycursorFactory,intversion){super(context,name,cursorFactory,version);}@OverridepublicvoidonCreate(SQLiteDatabasedb){//TODO創(chuàng)建數(shù)據庫后,對數(shù)據庫的操作}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,newVersion){//TODO更改數(shù)據庫版本的操作}@OverridepublicvoidonOpen(SQLiteDatabasedb){super.onOpen(db);//TODO每次成功打開數(shù)據庫后首先被執(zhí)行}}接下來討論具體如何創(chuàng)建表、插入數(shù)據、刪除表等等。調用getReadableDatabase()或getWriteableDatabase()方法,你可以得到SQLiteDatabase實例,具體調用那個方法,取決于你是否需要改變數(shù)據庫的內容:db=(newDatabaseHelper(getContext())).getWritableDatabase();return(db==null)?false:true;上面這段代碼會返回一個SQLiteDatabase查詢或者修改數(shù)據庫。當你完成了對數(shù)據庫的操作(例如你的Activity已經關閉),需要調用SQLiteDatabase的Close()方法來釋放掉數(shù)據庫連接。創(chuàng)建表和索引為了創(chuàng)建表和索引,需要調用SQLiteDatabase的execSQL()方法來執(zhí)行DDL語句。如果沒有異常,這個方法沒有返回值。例如,你可以執(zhí)行如下代碼:db.execSQL("CREATETABLEmytable(_idINTEGERPRIMARYKEYAUTOINCREMENT,titleTEXT,valueREAL);");這條語句會創(chuàng)建一個名為mytable的表,表有一個列名為_id,并且是主鍵,這列的值是會自動增長的整數(shù)(例如,當你插入一行時,SQLite會給這列自動賦值),另外還有兩列:title(value(SQLite為主鍵列創(chuàng)建索引。通常情況下,第一次創(chuàng)建數(shù)據庫時創(chuàng)建了表和索引。如果你不需要改變表的execSQL()DROPINDEX和DROPTABLE語句。給表添加數(shù)據給表添加數(shù)據。像上面創(chuàng)建表一樣,你可以使用execSQL()方法執(zhí)行INSERT,UPDATE,等語句來更新表的數(shù)據。execSQL()方法適用于所有不返回結果的SQL語句。例如:db.execSQL("INSERTINTOwidgets(name,inventory)"+"VALUES('Sprocket',5)");另一種方法是使用SQLiteDatabase對象的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()方法有四個參數(shù),分別是表名,表示列名和值的ContentValues對WHERE條件和可選的填充WHEREWHERE條件中的“?”標記。update()根據條件,更新指定列的值,所以用execSQL()方法可以達到同樣的目的。WHERE條件和其參數(shù)和用過的其他SQLAPIs類似。例如:String[]parms=newString[]{"thisisastring"};db.update("widgets",replacements,"name=?",delete()方法的使用和update()WHERE的填充WHERE條件的字符串。查詢數(shù)據庫類似INSERT,UPDATE,DELETE,有兩種方法使用SELECT從SQLite數(shù)據庫檢索數(shù)據。1.使用rawQuery()直接調用SELECT語句;使用query()方法構建一個查詢。RawQueries正如API以調用SQLSELECT語句。例如:Cursorc=db.rawQuery("SELECTnameFROMsqlite_masterWHEREtype='table'name='mytable'",null);SQLite(sqlite_master檢查tablecursor果。列在程序編譯的時候不能確定,這時候使用query()方法會方便很多。RegularQueriesquery()方法用SELECTSELECT語句內容作為方法的參數(shù),比如:要查詢的表名,要獲取的字段名,WHERE除了表名,其他參數(shù)可以是null。所以,以前的代碼段可以可寫成:String[]columns={"ID","inventory"};String[]parms={"snicklefritz"};Cursorresult=db.query("widgets",columns,"name=?",parms,null,null);使用游標Android的SQLite游標,使用游標,你可以:通過使用getCount()方法得到結果集中有多少記錄;通過moveToFirst(),moveToNext(),和isAfterLast()方法遍歷所有記錄;通過getColumnNames()得到字段名;通過getColumnIndex()轉換成字段號;通過getString(),getInt()等方法得到給定字段當前記錄的值;通過requery()方法重新執(zhí)行查詢得到游標;通過close()方法釋放游標資源;例如,下面代碼遍歷mytable表Cursorresult=db.rawQuery("SELECTID,name,inventoryFROMmytable");result.moveToFirst();while(!resul
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國截齒行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國彩色玻璃調料瓶行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國室內多功能LED信息顯示屏行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國子母熨衣板行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國含硒生血素行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國半圓腳帶燈指示牌行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國停車收費管理系統(tǒng)行業(yè)投資前景及策略咨詢報告
- 門診咨詢室管理制度
- 閉環(huán)在酒店管理制度
- 非醫(yī)療安全管理制度
- 湖南省懷化市鶴城區(qū)2023年數(shù)學三下期末監(jiān)測試題含解析
- 授權:如何激發(fā)全員領導力
- 禽病防治-禽流感(動物傳染病防治技術)
- 兒童少年生長發(fā)育與體育運動
- 市政危險源辨識及風險評價表
- 東南亞藝術概論智慧樹知到答案章節(jié)測試2023年云南藝術學院
- 循跡避障小車答辯
- (完整版)食品安全自查、從業(yè)人員健康管理、進貨查驗記錄、食品安全事故處置保證食品安全規(guī)章制度
- 《霸王茶姬》認證考核試題附答案
- 集裝箱冷板式液冷數(shù)據中心技術規(guī)范
- 山東財經大學《微觀經濟學》課程期末重點考試內容
評論
0/150
提交評論