日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

android SQLite数据库(转)

發布時間:2025/7/25 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android SQLite数据库(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android數據庫 之 SQLite數據庫

Android數據庫?

一、關系型數據庫SQLIte

  每個應用程序都要使用數據,Android應用程序也不例外,Android使用開源的、與操作系統無關的SQL數據庫—SQLite。SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。SQLite已經被多種軟件和產品使用,Mozilla FireFox就是使用SQLite來存儲配置數據的,Android和iPhone都是使用SQLite來存儲數據的。

SQLite體系結構圖如下:

    ?

  編譯器包括Tokenizer(詞法分析器)、 Parser(語法分析器)、Code Generator(代碼產生器)。他們協同處理文本形式的結構化查詢語句。

  后端由B-tree,Pager,OS Interface組成。B-tree的職責是負責排序,維護多個數據庫頁之間錯綜復雜的關系,將頁面組織成樹狀結構,頁面就是樹的葉子。Pager負責傳輸,根據B-tree的請求從磁盤讀取頁面或者寫入頁面。

  公共服務中有各種實用的功能比如:內存分配、字符串比較,Unicode轉換等。

?SQLite數據庫是D.Richard Hipp用C語言編寫的開源嵌入式數據庫,支持的數據庫大小為2TB。它具有如下特征:

1、輕量級

SQLite和C\S模式的數據庫軟件不同,它是進程內的數據庫引擎,因此不存在數據庫的客戶端和服務器。使用SQLite一般只需要帶上它的一個動態庫,就可以享受它的全部功能。而且那個動態庫的尺寸也相當小。

2、獨立性

SQLite數據庫的核心引擎本身不依賴第三方軟件,使用它也不需要“安裝”,所以在使用的時候能夠省去不少麻煩。

3、隔離性

SQLite數據庫中的所有信息(比如表、視圖、觸發器)都包含在一個文件內,方便管理和維護。

4、跨平臺

SQLite數據庫支持大部分操作系統,除了我們在電腦上使用的操作系統之外,很多手機操作系統同樣可以運行,比如Android、Windows Mobile、Symbian、Palm等。

5、多語言接口

SQLite數據庫支持很多語言編程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多開發者的喜愛。

6、安全性

SQLite數據庫通過數據庫級上的獨占性和共享鎖來實現獨立事務處理。這意味著多個進程可以在同一時間從同一數據庫讀取數據,但只有一個可以寫入數據。在某個進程或線程向數據庫執行寫操作之前,必須獲得獨占鎖定。在發出獨占鎖定后,其他的讀或寫操作將不會再發生。

?

SQLite官方網站(http://www.sqlite.org),了解更多內容請前往。

二、導出查看數據庫文件

  在android中,為某個應用程序創建的數據庫,只有它可以訪問,其它應用程序是不能訪問的,數據庫位于Android設備/data/data/package_name/databases文件夾中。

  想要將數據庫文件導出可以使用eclipse,如圖所示:

?

  查看數據庫,使用SQlite Database Browser,如圖所示:

?

?

三、擴展類

3.1擴展SQLiteOpenHelper

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

  構造函數,調用父類 SQLiteOpenHelper 的構造函數

  onCreate()方法;// TODO 創建數據庫后,對數據庫的操作

  onUpgrage()方法。// TODO 更改數據庫版本的操作

  當你完成了對數據庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉數據庫連接。

  操作數據庫的最佳實踐是創建一個輔助類,例如聯系人模塊

  class ContactsDatabaseHelper extends SQLiteOpenHelper

3.2 Cursor類

Android使用Cursor類返回一個需要的值,Cursor作為一個指針從數據庫查詢返回結果集,使用Cursor允許Android更有效地管理它們需要的行和列,你使用ContentValues對象存儲鍵/值對,它的put()方法允許你插入不同數據類型的鍵值。

3.3 數據類型

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

四、數據庫操作

4.1創建和打開數據庫

  在Android中創建和打開一個數據庫都可以使用openOrCreateDatabase方法來實現,因為它會自動去檢測是否存在這個數據庫,如果存在則打開,如果不存在則創建一個數據庫:創建成功則返回一個SQLiteDatebase對象,否則拋出異常FileNotFoundException。

下面我們來創建一個名為Test的數據庫,并返回一個SQLiteDatabase對象mSQLiteDatabase。

mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);

4.2創建表

  通過execSQL方法來執行一條SQL語句。

String CREATE_TABLE="create table 表名(列名,列名,……)"; mSQLiteDatabase.execSQL(CREATE_TABLE);

  創建表的時候總要確定一個主鍵,這個字段是64位整型,別名_rowid。其特點就是自增長功能。當到達最大值時,會搜索該字段未使用的值(某些記錄被刪除_rowid會被回收),所以要唯一嚴格增長的自動主鍵必須加入關鍵字autoincrement。

4.3刪除表

mSQLiteDatabase("drop table 表名");

4.4修改數據

4.4.1 插入記錄

可以使用insert方法來添加數據,但是insert方法要求把數據都打包到ContentValues中,ContentValues其實就是一個Map,Key值是字段名稱,Value值是字段的值。通過ContentValues的put方法就可以把數據放到ContentValues對象中,然后插入到表中去。具體實現如下:

ContentValues cv=new ContentValues(); cv.put(TABLE_NUM,1); cv.put(TABLE_DATA,"測試數據庫數據"); mSQLiteDatabase.insert(Test,null,cv);//同樣可以使用execSQL方法來執行一條“插入“的SQL語句String INSERT_DATA="insert into 表名(列名,……) values (值,……)"; mSQLiteDatabase.execSQL(INSERT_DATA);

4.4.2 更新記錄

ContentValues cv=new ContentValues(); cv.put(TABLE_NUM,3); cv.put(TABLE_DATA,"修改后數據"); mSQLiteDatabase.update(Test,cv,"num"+"="+rowId,null);//同樣可以使用execSQL方法來執行一條“更新”的SQL語句String UPDATE_DATA="update 表名 set 列名=xxx where xxx; mSQLiteDatabase.execSQL(UPDATE_DATA);

update 表名 set 列名=xxx [where條件]

4.4.3 刪除記錄

?

//要刪除數據可以使用delete方法 mSQLiteDatabase.delete("Test","WHERE _id="+0,null);//也可以通過execSQL方法執行SQL語句刪除數據 mSQLiteDatabase.execSQL("delete from 表名 where 條件");

?

?

4.5查詢

SELECT 列名 FROM 表名 WHERE 條件

例如在聯系人中保存3個聯系人,data表如下:

?

查詢data1值為10086的項

?

對查詢條件和返回值稍做修改

LIKE的使用

Like經常和 %或者 _ 搭配使用。

%可與任意0個或者多個字符匹配,_可與任意單個字符匹配。

?

?

?

GLOB的使用

Glob與like非常相似,常與 * 搭配。

?

限定和排序

關鍵字:order、limit、offset。

Order分為asc(默認升序),desc(降序)。

?

?

限定個數

?

指定偏移

?

?

內連接:通過表中兩個字段進行連接,找出兩個集合的交集。

? select? xxx from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名

左外連接:左表的所有項和內連接項。

? select? xxx from 表名1 left outer join 表名2 on 表名1.列名 = 表名2.列名

?

?

五、高級特性

5.1 視圖

  視圖是虛擬表,它的內容都派生自其它表的查詢結果。雖然它看起來像基本表,但是它不是,因為基本表的內容是持久的,而視圖的內容是使用時動態產生的。

  create view 表名 as 定義

5.2 索引

  索引是一種用來在某種條件下加速查詢的結構。

  create index 索引名 on 表名(列名)

5.3 觸發器

  觸發器的作用是當具體的表發生特定的數據事件時,執行對應的操作。

  create trigger 觸發器名 [before|after] [insert|delete|update|update of columns] on 表名 action

?

首先還謝謝是提供底稿的同事,這里只是介紹了基礎的東西,感興趣的同學,請SQLite官方網站(http://www.sqlite.org)了解。

轉載于:https://www.cnblogs.com/lovefan/p/3245735.html

總結

以上是生活随笔為你收集整理的android SQLite数据库(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。