SQLiteAndroid內建之嵌入式關係型資料庫,具輕載、速度快且是開放源碼。SQLite提供SQL介面,使用如同一般的資料庫,在手持終端上使用SQLite,一般並不涉及太複雜的資料庫處理,故AndroidAPI不採用JDBC技術(JDBC會消耗太多的資源)
SQLite支援絕大部分SQL-92標準,但不支援:FOREIGN KEY constraints, nested transactions, RIGHT OUTER JOIN, FULL OUTER JOIN, and some flavors of ALTER TABLE,除了上述之外,其他的SQL功能,包括triggertransaction等均支援,其實SQLite提供的功能對小型裝置如手機、PDA而言已足夠的。但與一般的SQL資料庫比較仍是有所差異,最大的差異是對定義資料類型的判別,如定義一個資料表的某個column的資料類型為Integer,但在插入資料時值域若採用String,在SQLite中是會將其轉為該欄位指定之Integer料類型存放,雖不會產生錯誤但存放資料之正確性卻有極大風險,為避免此問題之產生故可將輸入表格的資料作個提示,用於明確說明使用者必須輸入合乎期待的資料類型,此作法只是告知並無法真正做到檢測作用,如欲真得需要限制,則要以來程式代碼來進行判斷。
Ø   建立資料庫
開始儲放資料則須先創建資料庫,再於其內創建資料表及資料欄位之定義。使用前需要通過繼承SQLiteOpenHelper這個抽象類別來達到目的,並依需求重寫Constructor建構函式及onCreate()onUpgrade()等方法
以下例子創建一個稱為book資料庫,其內創建mytable資料表,並定義下列資料欄位:_idNameWeight。底下將分別列述如何創建資料庫、創建資料表及作增加、刪除、更新等資料異動作業。
/* 對於抽象類別SQLiteOpenHelper的繼承,需要重寫:1Constructor2onCreate()onUpgrade()方法  * */
public class Dbcls extends SQLiteOpenHelper{
    public static final String DATABASE_NAME ="book";

    /* step 1 :重寫建構函數,其內繼承super建構函數及創建database */
    public Dbcls(Context context){

        /* 第一個參數 為當前環境
         * 第二個參數 String name為資料庫檔,如果資料存放在記憶體 ,則為null
         * 第三個參數 SQLiteDatabase.CursorFactory  利用factory存放管理cursor,預設為null
         * 第四個參數 int version為指定資料庫的版本,從1開始,如判別版本為舊(數字較前期為小者),則通過onUpgrade()進行更新,如判別版本為新(數字較前期為大者)則通過onDowngrade()進行發佈。如要更改mytable資料表之資料欄位定義增加一列,或者修改初始化的資料,或者改變程式作業需要增加一個資料表,此時需要在指定版本的數字增加,在載入時才會對SQLite中的資料庫作更新,此點非常重要,同時參見onUpgrade()的說明 */
        super(context,DATABASE_NAME,null,1);
    }
    
    /*step 2 :重寫onCreate(),在Android系統中第一次創建我們的資料庫時(即後面介紹調用getWritableDatabase()或者getReadbleDatabase()時),將調用此onCreate()方法,過此處創建資料庫(雖然在構造函數中填入資料庫名,但資料庫的創建則須於onCreate()中進行)。一般在這裡進行創建table和寫入初始資料(如有此需求時)*/
    public void onCreate(SQLiteDatabase db) {

        //創建table:利用SQLCommand的語句,如“CREATE TABLE constants(_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, value REAL);”,可以直接通過db.execSQL(SQLCommand)來執行沒有返回值的SQL語言,例如CREATEDELETEUPDATEINSERTDROP
        db.execSQL("CREATE TABLE mytable(_id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT,Weight REAL); ");
        
        //下面加入三個初始資料,欲對表格進行增加、刪除、更新、查詢等作業,可參考後述之詳細說明。(下面之資料來源起自Android自帶可作感測器管理用的重力表)
        ContentValues cv = new ContentValues();
        
        cv.put("Name", "Gravity, Earth");
        cv.put("Weight", SensorManager.GRAVITY_EARTH);
        db.insert("mytable", "Name", cv);
        
        cv.put("Name", "Gravity, Mars");
        cv.put("Weight", SensorManager.GRAVITY_MARS);
        db.insert("mytable", "Name", cv);

        cv.put("Name", "Gravity, Moon");
        cv.put("Weight", SensorManager.GRAVITY_MOON);
        db.insert("mytable", "Name", cv);
    }

    /* step 3:重寫onUpgrade()如果版本比原來的高,將調用onUpgrade()
  
*此處進行刪除原來的資料表格,再根據新需求重新創建*/
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //同樣通過db.execSQL(SQLCommand)來執行沒有返回值的SQL語言,將資料表格刪除再予呼叫onCreate()重建
        db.execSQL("DROP TABLE IF EXISTS mytable");
        onCreate(db);
    }

}
Ø   連接資料庫
先期完成資料庫的創建、資料表創建夃初始資料的填入後,其餘之資料操作一般透過Activity呈現介面與用戶作互動產生,故在此處進行建立與資料庫的連接,並在Activity結束時將連接關閉以釋放有關資源。
public class Dbaccess extends ListActivity{           //將於ListView中顯示資料故須繼承ListActivity類別
  
  private SQLiteDatabase  db = null;
    private Cursor cursor = null;   //ListView中建立資料指標

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 獲取處理SQLiteOpenHelper子類的SQLite實例,如果唯讀,可以採用getReadableDatabase(),此處因須對SQLiteDatabase實例的操作,來進行資料之增刪改查等作業,故採用可寫getWritableDatabase()的方式。
        db= (new Dbcls (getApplicationContext())).getWritableDatabase();  
    }

    protected void onDestroy() {
        super.onDestroy();
       //先透過繼承父類進行釋放資源之必要程序
cursor.close();    //關閉Cursor作業程序(因其與SQLCommand敘述有關)
        db.close();        //關閉資料庫
    }
}
Ø   資料異動操作
對資料表之操作有兩種方式,一種是採用RAW方式,即直接給出SQL語句,另一種是採用定義於SQLiteDatabase中給出的方法來進行,稱為API方式。下面就以這兩種方式進行資料之增加、刪除、更新及查詢等作業分別討論。
u  增加資料
前述中在創建資料表格時採用了db.execSQL(SQLCommand)來執行沒有返回值的SQL敘述語言,此種即是以RAW方式來進行資料作業,且在加入初始資料時通過db.insert("mytable","Name",<ContentValues values>);型式來實現,其中第二個參數比較特別,此時如須欲運行插入一個空行,則須將此第二個參數設置為指定欄位名稱(注意:不得設置為null),只須分別將對應列的值設置為“NULL即可。
//RAW方式
db.execSQL("INSERT INTO mytable(Name,Weight) VALUES ('Test1',1.0);");

//API方式,通過db.insert("mytable","Name",<ContentValues values>);來處理,其中ContentValues是用於儲存名稱和數值,分別對應至表格欄位列的名稱和其在行中的資料
ContentValues values =new ContentValues(2);  //指定ContentValues具有2個值域
values.put("Name", "Test2");     //一個列名為Name,資料為Test2
values.put("Weight", 2.0);       //一個列名為Weight,資料為2.0
db.insert("mytable","Name",values);
u  刪除資料
//RAW方式
db.execSQL("DELETE FROM mytable WHERE Name='Test1';");  
 
//API方式,方法是:delete (String table, String whereClause, String[] whereArgs)
db.delete("mytable", "Name=?", {"Test1"});
u  更新資料
//RAW方式
db.execSQL("UPDATE mytable SET Weight=5.0 WHERE Name='Test1';");

//API方式,方法是:update (String table, ContentValuesvalues, StringwhereClause, String[]whereArgs)
String[] name = {"Test1"};
ContentValues values =new ContentValues(2);
values.put("Name", "Test1");
values.put("Weight", 5.0);
db.update("mytable",values,"Name=?",name);
u  查詢資料
上述之三個資料操作均是無返回值的,然而查詢SELECT則不然,其將返回指標Cursor型態,其方式如下:
//RAW方式,帶返回值,採用db.rawQuery(SQL語句)方式
Cursor result1 =db.rawQuery("SELECT _id,Name,Weight from mytable ORDER BY Name", null);

/API方式,帶返回值,採用public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
String[] columns ={"Name","Weight"};
String[] name ={"Name"};
Cursor result2 = db.query("mytable", columns, "Name=?", name, null, null, null);
指標和Iterator介面有些相似,對於Cursor result可以通過下面的方式來讀取資料
result.moveToFirst();
while(!result.isAfterLast()){ 
    int id = result.getInt(0); 
    String name = result.getString(1);
    double weight = result.getDouble(2);
    System.out.println("\t "+id + "\t["+ name + "]\t" +weight);
    result.moveToNext();
}        
result.close();    
通過Cursor我們可以讀取資料庫的詳細資訊,可將資料利用ArrayList<HashMap<>>類型來存放,由於real型態為非物件,故可用ArrayList<HashMap<String,String>>來存儲。
當有能力對SQLite資料進行處理作業,且也有能力處理ListView作為資料呈現,如此便可進行編寫Activity主體程式之安排。
★☆後註Cursor中其實已存放有資訊,除可直接對其進行資料處理之相關作業,但亦可使CursorAdapter來作為中閶媒介之轉接器,此為目前Android在處理資料程序採用之技巧,建議熟悉此種進階方式之處理模式(可參考"綜合運用SQLite、ListView及ContextMenu結合之應用"文章)