freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]android應(yīng)用與游戲開發(fā)第8章數(shù)據(jù)存儲(chǔ)與訪問(wèn)-資料下載頁(yè)

2024-12-08 02:20本頁(yè)面
  

【正文】 HT = height。 10. 11. private SQLiteDatabase db。 12. private final Context context。 13. private DBOpenHelper dbOpenHelper。 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) 14. 15. private static class DBOpenHelper extends SQLiteOpenHelper {} 16. 17. public DBAdapter(Context _context) { 18. context = _context。 19. } 20. 21. public void open() throws SQLiteException { 22. dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION)。 23. try { 24. db = ()。 25. }catch (SQLiteException ex) { 26. db = ()。 27. } 28. } 29. 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 從代碼的第 2行到第 9行可以看出,在 DBAdapter類中首先聲明了數(shù)據(jù)庫(kù)的基本信息,包括數(shù)據(jù)庫(kù)文件的名稱、數(shù)據(jù)庫(kù)表格名稱和數(shù)據(jù)庫(kù)版本,以及數(shù)據(jù)庫(kù)表中的屬性名稱 ? 從這些基本信息上不難發(fā)現(xiàn),這個(gè)數(shù)據(jù)庫(kù)與前一小節(jié)手動(dòng)建立的數(shù)據(jù)庫(kù)是完全相同的 30. public void close() { 31. if (db != null){ 32. ()。 33. db = null。 34. } 35. } 36. } 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 第 11行代碼聲明了 SQLiteDatabase對(duì)象 db。SQLiteDatabase類封裝了非常多的方法,用以建立、刪除數(shù)據(jù)庫(kù),執(zhí)行 SQL命令,對(duì)數(shù)據(jù)進(jìn)行管理等工作 ? 第 13行代碼聲明了一個(gè)非常重要的幫助類SQLiteOpenHelper,這個(gè)幫助類可以輔助建立、更新和打開數(shù)據(jù)庫(kù) ? 第 21行代碼定義了 open()函數(shù)用來(lái)打開數(shù)據(jù)庫(kù),但 open()函數(shù)中并沒有任何對(duì)數(shù)據(jù)庫(kù)進(jìn)行實(shí)際操作的代碼,而是調(diào)用了 SQLiteOpenHelper類的 getWritableDatabase()函數(shù)和 getReadableDatabase()函數(shù)。這個(gè)兩個(gè)函數(shù)會(huì)根據(jù)數(shù)據(jù)庫(kù)是否存在、版本號(hào)和是否可寫等情況,決定在返回?cái)?shù)據(jù)庫(kù)對(duì)象前,是否需要建立數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 在代碼第 30行的 close()函數(shù)中,調(diào)用了 SQLiteDatabase對(duì)象的 close()方法關(guān)閉數(shù)據(jù)庫(kù) ? 這是上面的代碼中,唯一的一個(gè)地方直接調(diào)用了SQLiteDatabase對(duì)象的方法 ? SQLiteDatabase中也封裝了打開數(shù)據(jù)庫(kù)的函數(shù)openDatabases()和創(chuàng)建數(shù)據(jù)庫(kù)函數(shù)openOrCreateDatabases(),因?yàn)榇a中使用了幫助類SQLiteOpenHelper,從而避免直接調(diào)用 SQLiteDatabase中的打開和創(chuàng)建數(shù)據(jù)庫(kù)的方法,簡(jiǎn)化了數(shù)據(jù)庫(kù)打開過(guò)程中繁瑣的邏輯判斷過(guò)程 ? 代碼第 15行實(shí)現(xiàn)了內(nèi)部靜態(tài)類 DBOpenHelper,繼承了幫助類 SQLiteOpenHelper 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 重載了 onCreate()函數(shù)和 onUpgrade()函數(shù)的代碼如下 1. private static class DBOpenHelper extends SQLiteOpenHelper { 2. public DBOpenHelper(Context context, String name, CursorFactory factory, int version){ 3. super(context, name, factory, version)。 4. } 5. private static final String DB_CREATE = create table + 6. DB_TABLE + ( + KEY_ID + integer primary key autoincrement, + 7. KEY_NAME+ text not null, + KEY_AGE+ integer, + KEY_HEIGHT + float)。 8. 9. @Override 10. public void onCreate(SQLiteDatabase _db) { 11. (DB_CREATE)。 12. } 13. 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 第 5行到第 7行代碼的是創(chuàng)建表的 SQL命令 ? 第 10行和第 15行代碼分別重載了 onCreate()函數(shù)和onUpgrade()函數(shù),這是繼承 SQLiteOpenHelper類必須重載的兩個(gè)函數(shù)。 onCreate()函數(shù)在數(shù)據(jù)庫(kù)第一次建立時(shí)被調(diào)用,一般用來(lái)用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)中的表,并做適當(dāng)?shù)某跏蓟ぷ? 14. @Override 15. public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) { 16. (DROP TABLE IF EXISTS + DB_TABLE)。 17. onCreate(_db)。 18. } 19. } 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 在代碼第 11行中,通過(guò)調(diào)用 SQLiteDatabase對(duì)象的execSQL()方法,執(zhí)行創(chuàng)建表的 SQL命令。 onUpgrade()函數(shù)在數(shù)據(jù)庫(kù)需要升級(jí)時(shí)被調(diào)用,一般用來(lái)刪除舊的數(shù)據(jù)庫(kù)表,并將數(shù)據(jù)轉(zhuǎn)移到新版本的數(shù)據(jù)庫(kù)表中 ? 第 16行和第 17行代碼中,為了簡(jiǎn)單起見,并沒有做任何的的數(shù)據(jù)轉(zhuǎn)移,而僅僅刪除原有的表后建立新的數(shù)據(jù)庫(kù)表 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 程序開發(fā)人員不應(yīng)直接調(diào)用 onCreate()和 onUpgrade()函數(shù),而應(yīng)該由 SQLiteOpenHelper類來(lái)決定何時(shí)調(diào)用這兩個(gè)函數(shù) ? SQLiteOpenHelper類的 getWritableDatabase()函數(shù)和getReadableDatabase()函數(shù)是可以直接調(diào)用的函數(shù) ? getWritableDatabase()函數(shù)用來(lái)建立或打開可讀寫的數(shù)據(jù)庫(kù)對(duì)象,一旦函數(shù)調(diào)用成功,數(shù)據(jù)庫(kù)對(duì)象將被緩存,任何需要使用數(shù)據(jù)庫(kù)對(duì)象時(shí),都可以調(diào)用這個(gè)方法獲取到數(shù)據(jù)庫(kù)對(duì)象,但一定要在不使用時(shí)調(diào)用 close()函數(shù)關(guān)閉數(shù)據(jù)庫(kù) ? 如果保存數(shù)據(jù)庫(kù)文件的磁盤空間已滿,調(diào)用getWritableDatabase()函數(shù)則無(wú)法獲得可讀寫的數(shù)據(jù)庫(kù)對(duì)象,這時(shí)可以調(diào)用 getReadableDatabase()函數(shù),獲得一個(gè)只讀的數(shù)據(jù)庫(kù)對(duì)象 數(shù)據(jù)庫(kù)存儲(chǔ) ? 代碼建庫(kù) ? 如果程序開發(fā)人員不希望使用 SQLiteOpenHelper類,同樣可以直接創(chuàng)建數(shù)據(jù)庫(kù) ? 首先調(diào)用 openOrCreateDatabases()函數(shù)創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象 ? 然后執(zhí)行 SQL命令建立數(shù)據(jù)庫(kù)中的表和直接的關(guān)系 ? 示例代碼如下 1. private static final String DB_CREATE = create table + 2. DB_TABLE + ( + KEY_ID + integer primary key autoincrement, + 3. KEY_NAME+ text not null, + KEY_AGE+ integer, + KEY_HEIGHT + float)。 4. public void create() { 5. (DB_NAME, , null) 6. (DB_CREATE)。 7. } 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? 數(shù)據(jù)操作是指對(duì)數(shù)據(jù)的添加、刪除、查找和更新的操作 ? 通過(guò)執(zhí)行 SQL命名完成數(shù)據(jù)操作,但推薦使用 Android提供的專用類和方法,這些類和方法更加簡(jiǎn)潔、易用 ? 為了使 DBAdapter類支持對(duì)數(shù)據(jù)的添加、刪除、更新和查找等功能,在 DBAdapter類中增加下面的這些函數(shù) ? insert(People people)用來(lái)添加一條數(shù)據(jù) ? queryAllData()用來(lái)獲取全部數(shù)據(jù) ? queryOneData(long id)根據(jù) id獲取一條數(shù)據(jù) ? deleteAllData()用來(lái)刪除全部數(shù)據(jù) ? deleteOneData(long id)根據(jù) id刪除一條數(shù)據(jù) ? updateOneData(long id , People people)根據(jù) id更新一條數(shù)據(jù) 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? ConvertToPeople(Cursor cursor)是私有函數(shù),作用是將查詢結(jié)果轉(zhuǎn)換為用來(lái)存儲(chǔ)數(shù)據(jù)自定義的 People類對(duì)象 ? People類的包含四個(gè)公共屬性,分別為 ID、 Name、 Age和 Height,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的四個(gè)屬性值 ? 重載 toString()函數(shù),主要是便于界面顯示的需要 1. public class DBAdapter { 2. public long insert(People people) {} 3. public long deleteAllData() { } 4. public long deleteOneData(long id) { } 5. public People[] queryAllData() {} 6. public People[] queryOneData(long id) { } 7. public long updateOneData(long id , People people){ } 8. 9. private People[] ConvertToPeople(Cursor cursor){} 10. } 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? People類的代碼如下 1. public class People { 2. public int ID = 1。 3. public String Name。 4. public int Age。 5. public float Height。 6. 7. @Override 8. public String toString(){ 9. String result = 。 10. result += ID: + + , 。 11. result += 姓名: + + , 。 12. result += 年齡: + + , 。 13. result += 身高: + + , 。 14. return result。 15. } 16. } 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? SQLiteDatabase類的公共函數(shù) insert()、 delete()、update()和 query(),封裝了執(zhí)行的添加、刪除、更新和查詢功能的 SQL命令 ? 下面分別介紹如何使用 SQLiteDatabase類的公共函數(shù),完成數(shù)據(jù)的添加、刪除、更新和查詢等操作 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? 添加功能 ? 首先構(gòu)造一個(gè) ContentValues對(duì)象,然后調(diào)用ContentValues對(duì)象的 put()方法,將每個(gè)屬性的值寫入到ContentValues對(duì)象中,最后使用 SQLiteDatabase對(duì)象的insert()函數(shù),將 ContentValues對(duì)象中的數(shù)據(jù)寫入指定的數(shù)據(jù)庫(kù)表中 ? insert()函數(shù)的返回值是新數(shù)據(jù)插入的位置,即 ID值。ContentValues類是一個(gè)數(shù)據(jù)承載容器,主要用來(lái)向數(shù)據(jù)庫(kù)表中添加一條數(shù)據(jù) 數(shù)據(jù)庫(kù)存儲(chǔ) ? 數(shù)據(jù)操作 ? 第 4行代碼向 ContentValues對(duì)象 newValues中添加一個(gè)名稱/值對(duì), put()函數(shù)的第 1個(gè)參數(shù)是名稱,第 2個(gè)參數(shù)是值 ? 在第 8行代碼的 insert()函數(shù)中,第 1個(gè)參數(shù)是數(shù)據(jù)表的名稱,第 2個(gè)參數(shù)是在 NULL時(shí)的替換數(shù)據(jù),第 3個(gè)參數(shù)是需要向數(shù)據(jù)庫(kù)表中添加的數(shù)據(jù) 1. public long insert(People people) { 2. ContentV
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1