天天看點

Android--SQLite(一)

 Android系統內建了一個輕量級的資料庫:SQLite,SQLite是一個嵌入式的資料庫引擎,專門适用于資源有限的裝置上(手機、PDA)的适量資料存儲。

  Android提供了SQLiteDatabase,它代表了一個SQLite資料庫(底層就是一個資料檔案),在個資料庫中理論上是這可以存在無限多個表的。一旦應用程式獲得了代表指定資料庫的SQLiteDatabase對象,就可以通過SQLiteDatabase對象來操作SQLite資料庫。

  SQLiteDatabase提供了幾個靜态的方法來打開一個檔案對應的資料庫,此處介紹幾個常用的:

  static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags):打開path檔案所代表的SQLite資料庫。

  static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory):打開或建立(如果不存在)path檔案所代表的SQLite資料庫。

  static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory):打開或建立(如果不存在)file檔案所代表的SQLite資料庫。

  在得到SQLiteDatabase對象之後,就可以調用方法執行SQL語句了,在此處介紹幾個常用的方法,是直接執行SQL語句的,需要有SQL文法基礎,如果不熟悉SQL文法,SQLiteDatabase還提供了其他代替方法,此處不在此介紹。

  void execSQL(String sql):執行無傳回值的SQL語句,如:insert、delete、update。

  void execSQL(String sql, Object[] bindArgs):執行帶占位符的SQL語句,占位符用?表示。

  Cursor rawQuery(String sql, String[] selectionArgs):執行一個帶占位符的查詢,傳回一個Cursor對象。

  void beginTransaction():開始事務。

  void endTransaction ():結束事務。

  void close ():關閉資料庫

  對于查詢方法,會傳回一個Cursor對象,Cursor提供如下方法來移動查詢結果的記錄指針。

abstract boolean move(int offset):将記錄指針向上或向下移動指定的行數。offset為正數就是向下移動;為負數就是向上移動。

abstract boolean moveToFirst():将記錄指針移動到第一行,如果移動成功則傳回true。

abstract boolean moveToLast():将記錄指針移動到最後行,如果移動成功則傳回true。

abstract boolean moveToNext():将記錄指針移動到下一行,如果移動成功則傳回true。

abstract boolean moveToPosition(int position):将記錄指針移動到指定的行,如果移動成功則傳回true。

abstract boolean moveToPrevious():将記錄指針移動到上一行,如果移動成功則傳回true。

abstract Xxx getXxx(int columnIndex):擷取該行的指定列的資料。

示例:建立一個資料庫并往其中插入資料。

Java Code

  PS:通過File Explorer檢視Android模拟器檔案,發現新建立的資料庫檔案在data/data/<package name>/files/目錄下面。

  總結起來,使用SQLiteDatabase對象進行SQLite資料庫操作的大緻步驟如下:

擷取SQLiteDatabase對象,它代表了與SQLite資料庫的連接配接。

調用SQLiteDatabase對象的方法來執行SQL語句。

操作SQL語句的執行結果。

關閉SQLiteDatabase對象,回收資源。

  sqlite3

  在Android的SDK中,提供了一個名為sqlite3.exe的工具(在tools檔案夾下)。它是一個簡單的SQLite資料庫管理工具,類似于MySQL提供的指令行視窗。

  SQLite支援的資料類型

  SQLite内部隻支援NULL、INTEGER、REAL(浮點型)、TEXT(文本)、BLOB(大二進制對象)這五種資料類型。但是實際上SQLite完全可以接受varchar、char、decimal等資料類型,隻不過SQLite會在運算或儲存時将他們轉換為上面5種資料類型中相應的類型,是以開發者可以不關心聲明該字段所使用的資料類型。

  唯一例外的情況是:定義為INTEGER PRIMARY KEY的字段隻能存儲64位整數,當向其插入其他類型資料的時候,SQLite會産生錯誤。

  SQLite的事務

  SQLite也支援事務機制,前面已經介紹了SQLiteDatabase包含的兩個控制事務的方法:beginTransaction(開始事務)和endTransaction(結束事務)。除此之外SQLiteDatabase對象還提供了inTransaction方法判斷上下文是否處于事務中,處于傳回true,否則傳回false。

  對于資料庫的操作,SQLiteDatabase如何判斷送出事務還是復原事務?

  SQLiteDatabase對象中還存在一個方法setTransactionSuccessful,用于設定事務的辨別,如果程式事務執行中調用該方法設定了事務成功,則送出事務,否則程式将復原事務。最好配合try--finally來處理。

示例:

<a></a>

本文轉自承香墨影部落格園部落格,原文連結:http://www.cnblogs.com/plokmju/archive/2013/03/19/2969274.html,如需轉載請自行聯系原作者