久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SQLite介紹

 昵稱10504424 2013-12-19

SQLite是一個非常流行的嵌入式數(shù)據(jù)庫,,它支持SQL語言,,并且只利用很少的內(nèi)存就有很好的性能。此外它還是開源的,,任何人都可以使用它,。許多開源項目(Mozilla, PHP, Python)都使用了SQLite。

SQLite由以下幾個組件組成:SQL編譯器、內(nèi)核,、后端以及附件,。SQLite通過利用虛擬機和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試,、修改和擴展SQLite的內(nèi)核變得更加方便,。

下圖是SQLite內(nèi)部結(jié)構(gòu)圖

SQLite基本上符合SQL-92標(biāo)準(zhǔn),和其他的主要SQL數(shù)據(jù)庫沒什么區(qū)別,。它的優(yōu)點就是高效,,Android運行時環(huán)境包含了完整的SQLite。

SQLite和其他數(shù)據(jù)庫最大的不同就是對數(shù)據(jù)類型的支持,,創(chuàng)建一個表時,,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中,。當(dāng)某個值插入數(shù)據(jù)庫時,,SQLite將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,,則SQLite會嘗試將該值轉(zhuǎn)換成該列的類型,。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲,。如果可以把一個字符串(String)放入 INTEGER 列,。SQLite稱這為"弱類型"。

Android集成了SQLite數(shù)據(jù)庫

Android在運行時集成了SQLite,,所以每個Android應(yīng)用程序都可以使用SQLite數(shù)據(jù)庫,。對于熟悉SQL的開發(fā)人員來說,在Android開發(fā)中使用SQLite相當(dāng)簡單,。但是由于JDBC會消耗太多系統(tǒng)資源,所以JDBC對于手機這種內(nèi)存受限設(shè)備來說并不合適,。因此,,Android提供了一些新的API來使用SQLite數(shù)據(jù)庫,Android開發(fā)中,,程序員需要學(xué)使用這些API,。

數(shù)據(jù)庫存儲在data/data/<項目文件夾>/databases/下

Android開發(fā)中使用SQLite數(shù)據(jù)庫

Activities可以通過Content Provider或者Service訪問一個數(shù)據(jù)庫。下面會詳細講解如何創(chuàng)建數(shù)據(jù)庫,、添加數(shù)據(jù),、修改數(shù)據(jù)和查詢數(shù)據(jù)。

一.創(chuàng)建數(shù)據(jù)庫

Android不自動提供數(shù)據(jù)庫,。在Android應(yīng)用程序中使用SQLite,,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,,填充數(shù)據(jù),。Android提供了SQLiteOpenHelper類幫助你創(chuàng)建一個數(shù)據(jù)庫,你只要繼承SQLiteOpenHelper類,,就可以輕松創(chuàng)建數(shù)據(jù)庫,。SQLiteOpenHelper類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯,。SQLiteOpenHelper的子類,,至少需要實現(xiàn)三個方法:

1.構(gòu)造函數(shù),調(diào)用父類SQLiteOpenHelper的構(gòu)造函數(shù),。這個方法需要四個參數(shù):上下文環(huán)境(例如一個Activity),,數(shù)據(jù)庫名字,一個可選的游標(biāo)工廠(通常是NULL),,一個代表你正在使用的數(shù)據(jù)庫模型版本的整數(shù),。

2.onCreate()方法,它需要一個SQLiteDatabase對象作為參數(shù),,根據(jù)需要對這個對象填充表和初始化數(shù)據(jù),。

3.onUpgrade()方法,它需要三個參數(shù),,一個SQLiteDatabase對象,,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個數(shù)據(jù)庫從舊的模型轉(zhuǎn)變到新的模型,。

下面的示例代碼展示了如何繼承SQLiteOpenHelper創(chuàng)建數(shù)據(jù)庫:

接下來討論具體如何創(chuàng)建表、插入數(shù)據(jù),、刪除表等等,。調(diào)用getReadableDatabase()或

getWritableDatabase()方法,你可以得到SQLiteDatabase實例,,具體調(diào)用哪個方法,,取決于你是否需要改變數(shù)據(jù)庫的內(nèi)容:

  

上面這段代碼會返回一個SQLiteDatabase類的實例,使用這個對象,,你就可以查詢或者修改數(shù)據(jù)庫,。當(dāng)你完成了對數(shù)據(jù)庫的操作(例如你的Activity已經(jīng)關(guān)閉),需要調(diào)用SQLiteDatabase的Close()方法來釋放掉數(shù)據(jù)庫連接,。

二.創(chuàng)建表和索引

為了創(chuàng)建表和索引,,需要調(diào)用SQLiteDatabase的execSQL()方法來執(zhí)行SQL語句。如果沒有異常,,這個方法沒有返回值,。

例如,,你可以執(zhí)行如下代碼:

這條語句會創(chuàng)建一個名為myTable的表,表有一個列名為_id,,并且有一個主鍵,,這列的值是會自動增長的整數(shù)(例如,當(dāng)你插入一行時,,SQLite會給這列自動賦值),,另外還有兩列:title(字符)和value(浮點數(shù))。SQLite會自動為主鍵列創(chuàng)建索引,。

通常情況下,,第一次創(chuàng)建數(shù)據(jù)庫時創(chuàng)建了表和索引。如果你不需要改變表的schema,,不需要刪除表和索引,。

刪除表和索引需要使用execSQL()方法調(diào)用DROP INDEX和DROP TABLE語句。

三.給表添加數(shù)據(jù)

上面的代碼,,已經(jīng)創(chuàng)建了數(shù)據(jù)庫和表,,現(xiàn)在需要給表添加數(shù)據(jù)。有兩種方法可以給表添加數(shù)據(jù),。像上面創(chuàng)建表一樣,,你可以使用execSQL()方法執(zhí)行INSERT、UPDATE,、DELETE等語句來更新表的數(shù)據(jù),。execSQL()方法適用于所有不返回結(jié)果的SQL語句。例如:

另一種方法是使用SQLiteDatabase對象的insert(),、update(),、delete()方法。這些方法把SQL語句的一部分作為參數(shù),。示例如下:

WHERE條件和其參數(shù)和用過的其他SQL APIS類似。例如:

delete()方法的使用和update()類似,,使用表名,可選的WHERE條件和相應(yīng)的填充WHERE條件的字符串,。

四.查詢數(shù)據(jù)庫

  類似INSERT,、UPDATE、DELETE,,有兩種方法使用SELECT從SQLite數(shù)據(jù)庫檢索數(shù)據(jù),。

  1.Raw Query()

    正如API名字,,rawQuery()是最簡單的解決方法。通過這個方法你就可以調(diào)用SQL SELECT語句,。例如:

    Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='myTable'", null);

    在上面的例子中,,我們查詢SQLite系統(tǒng)表(sqlite_master)檢查table表是否存在。返回值是一個cursor對象,,這個對象的方法可以迭代查詢結(jié)果,。  

    如果查詢是動態(tài)的,,使用這個方法就會非常復(fù)雜,。例如,當(dāng)你需要查詢的列在程序編譯的時候不能確定,,這時候使用query()方法會方便很多,。

  2.Regular Queries

    query()方法用SELECT語句段構(gòu)建查詢。SELECT語句內(nèi)容作為query()方法的參數(shù),,比如:要查詢的表名,,要獲取的字段名,WHERE條件,,包含可選的位置參數(shù),,

    去替代WHERE條件中位置參數(shù)的值,GROUP BY 條件,,HAVING條件,。

    除了表名,其他參數(shù)可以是null,。所以,,以前的代碼段可以寫成:

    String[] columns = {"ID", "inventory"};

    String[] parms = {"snicklefritz"};

    Cursor result = db.query("widgets", columns, "name=?", parms, null, null, null);

五.使用游標(biāo)

不管你如何執(zhí)行查詢,都會返回一個Cursor,,這是Android的SQLite數(shù)據(jù)庫游標(biāo),,使用游標(biāo),你可以:

    1.通過getCount()方法得到結(jié)果集中有多少記錄,;

    2.通過moveToFirst(),、moveToNext()、isAfterLase()方法遍歷所有記錄,;

    3.通過getColumnNames()得到字段名,;

    4.通過getColumnIndex()轉(zhuǎn)換成字段號;

    5.通過getString(),、getInt()等方法得到給定字段當(dāng)前記錄的值,;

    6.通過requery()方法重新執(zhí)行查詢得到游標(biāo);

    7.通過close()方法釋放游標(biāo)資源,;

例如,,下面代碼遍歷myTable表

  

六.在Android中使用SQLite數(shù)據(jù)庫管理工具

在其他數(shù)據(jù)庫上作開發(fā),,一般都使用工具來檢查和處理數(shù)據(jù)庫的內(nèi)容,而不是僅僅使用數(shù)據(jù)庫的API,。使用Android模擬器,,有兩種可供選擇的方法來管理數(shù)據(jù)庫。

首先,,模擬器綁定了sqlite3控制臺程序,,可以使用adb shell命令來調(diào)用他。只要你進入了模擬器的shell,,在數(shù)據(jù)庫的路徑執(zhí)行sqlite3命令就可以了,。數(shù)據(jù)庫文件一般存放在:

/data/data/your.app.package/databases/your-db-name

如果你喜歡使用更友好的工具,你可以把數(shù)據(jù)庫拷貝到你的開發(fā)機上,,使用SQLite-aware客戶端來操作它,。這樣的話,你在一個數(shù)據(jù)庫的拷貝上操作,,如果你想要你的修改能反映到設(shè)備上,,你需要把數(shù)據(jù)庫備份回去。

把數(shù)據(jù)庫從設(shè)備上拷貝出來,,你可以使用adb pull命令(或者在IDE上做相應(yīng)的操作),。存儲一個修改過的數(shù)據(jù)庫到設(shè)備上,使用adb push命令,。

結(jié)束語

如果你想要開發(fā)Android應(yīng)用程序,,一定需要在Android上存儲數(shù)據(jù),使用SQLite數(shù)據(jù)庫是一種非常好的選擇,。本文介紹了如何在Android應(yīng)用程序中使用SQLite數(shù)據(jù)庫,,主要介紹了在Android應(yīng)用程序中使用SQLite創(chuàng)建數(shù)據(jù)庫和表、添加數(shù)據(jù),、更新和檢索數(shù)據(jù),,還介紹了比較常用的SQLite管理工具。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多