(一)、簡介: 
         
 
         - Android通過 SQLite 數據庫引擎來實現結構化數據的存儲。在一個數據庫應用程序中,任何類都可以通過名字對已經創建的數據庫進行訪問,但是在應用程序之外就不可以。
 - SQLite 數據庫是一種用C語言編寫的嵌入式數據庫,它是一個輕量級的數據庫,最初為嵌入式設計的。它是在一些基礎簡單的語句處理上要比oracle / mysql快很多,而且其對內存的要求很低,在內存中只需要幾百KB的存儲空間。這是Android中采用 SQLite 數據庫的主要原因。
 - SQLite 支持事務處理功能。Transaction
 - SQLite 處理速度比MySQL等著名的開源數據庫系統更快。它沒有服務器進程。
 - SQLite 通過文件保存數據庫,該文件是跨平台的,可以自由復制。一個文件就是一個數據庫。數據庫名即文件名。
 - JDBC會消耗太多系統資源,所以JDBC對於手機並不合適,因此Android提供了新的API來使用 SQLite 數據庫。
 
 
          三、SQLiteDatabase類: 
         
 
          
          SQLiteDatabase等同於JDBC中Connection和Statement的結合體。SQLiteDatabase既代表與數據庫的連接,又只能用於執行sql語句操作。 
         
 
          
           (一)、操作 SQLite 數據庫的步驟:【重要】 
          
 
           
           1、創建 SQLiteDatabase 對象,它代表與數據庫的連接; 
          
 
           
           2、創建數據庫中的表(執行CREATE); 
          
 
           
           3、調用SQLiteDatabase 對象執行數據庫操作(執行DML); 
          
 
           
           4、對查詢后的結果集Cursor進行處理。 
          
 
          
          (二)、操作 SQLite 數據庫的步驟詳細講解: 
         
 
          
          1、創建 SQLite 數據庫對象:SQLiteDatabase對象代表一個數據庫。 SQLiteDatabase提供了幾個靜態方法來打開一個文件對應的數據庫。 
         
 
         - static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
 - static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)
 - static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler)
 - static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
 
 
            【備注:】打開數據庫的參數: 
           
 
            
            1、參數中的path代表着數據庫的路徑(如果是在默認路徑/data/data/<package_name>/databases/下,則這里只需要提供數據庫名稱); 
           
 
            
            2、factory代表着在創建Cursor對象時,使用的工廠類,如果為null的話,則使用默認的工廠(這里我們可以實現自己的工廠進行某些數據處理); 
           
 
            
            3、flags代表的是創建表時的一些權限設置,多個權限之間用|分隔: 
           
 
           - OPEN_READONLY :代表的是以只讀方式打開數據庫(常量值為:1)
 - OPEN_READWRITE:代表以讀寫方式打開數據庫(常量值為:0)
 - CREATE_IF_NECESSARY:當數據庫不存在時創建數據庫
 - NO_LOCALIZED_COLLATORS:打開數據庫時,不根據本地化語言對數據庫進行排序(常量值為:16)
 
代碼:
//當數據庫存在時:
 
            
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "android_manual.db";
 
            
SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READWRITE);
 
            
Cursor cursor = db.rawQuery("select * from android_basic order by id desc limit 0 , 15",null);
 
            
 
            
//當數據庫不存在時:
 
            
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";
 
            
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
 
            
db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
創建表:
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
 
            db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
 
            String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";
主意:
 
               一。SQLite的數據類型? 
              
 
               
                       首先你會接觸到一個讓你驚訝的名詞: Typelessness(無類型)。其實SQLite是無類型的。這意味着你可以保存任何類型的數據到數據庫表的任何列中, 無論這列聲明的數據類型是什么。對於SQLite來說對字段不指定類型是完全有效的。如:create table dict(_id integer primary key autoincrement , word , detail); 
              
 
               
                   注意:這里一定要注意,SQLite數據庫在一種情況下是要求類型匹配的,當我們建表是如create table table1(id integer primary key),sqlite對應一位integer primary key的列值允許你存儲64位的整數。必須是INTEGER PRIMARY KEY  AUTOINCREMENT。 
              
 
              
                      誠然SQLite允許忽略數據類型, 但是仍然建議在你的Create Table語句中指定數據類型. 因為數據類型對於你和其他的程序員交流, 或者你准備換掉你的數據庫引擎時能起到一個提示或幫助的作用。 
             
 
              
             二、調用SQLiteDatabase 對象的方法執行數據庫操作:【重要】 
            
 
            - execSQL(String sql , Object[] args) 執行帶占位符的sql語句(update,insert,delete語句)
 - rawQuery( String sql , String[] args ) 執行帶占位符的sql查詢(select語句)
 - beginTransaction() 開始事務
 - endTransaction() 結束事務
 
 
              【備注:】除了以上重要的四個方法外,Android考慮到不熟悉sql語句的開發者,提供了進一步封裝后的一系列方法。但是以下這幾個方法參數眾多,平時不建議使用,但是一定也要掌握,在ContentProvider中會有類似的方法,要注意區分。 
             
 
            - insert()
 - update()
 - delete()
 - query()
 
- move(int offset) 按偏移量來移動
 - moveToFirst() 將記錄指針移動到第一行
 - moveToLast () 將記錄指針移動到最后一行
 - moveToNext () 將記錄指針移動到下一行
 - moveToPosition(int position) 將記錄指針移動到指定的一行
 - moveToPrevious() 將記錄指針移動到上一行
 - getCount() 返回Cursor的行數
 - getColumnName(int index) 根據列的索引返回其相應的列名稱
 - getColumnIndex(String name) 根據列的名字返回其相應的索引
 - getColumnNames() 返回一個保存有所有列名稱的字符串數組
 - getColumnCount() 返回列的總數
 - close() 關閉游標結果集,釋放資源
 - getType() 獲取字段的數據類型。分別有0、1、2、3、4這幾個結果。
 -  
               
- 0: 代表null
 - 1:代表int
 - 2:代表float
 - 3:代表String
 - 4:代表blob
 
 
 
              (四)、事務:【重要】 
             
 
              
                      數據庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要么完整地執行,要么完全地不執行。事務的目的是為了保證數據的一致性。  
             
 
            
