SQLite 輕量級資料庫,主要用於嵌入式系統,只佔幾百K系統資源 具有如下特性: 輕量性:只需要一個動態庫,就可以享受全部功能,而且動態庫尺寸也很小 獨立性:核心引擎不需要依賴第三方軟體 隔離性:資料庫所有資訊(表、視圖、觸發器)都放在同一個檔案裡 跨平台:支援大部分作業系統,也可以在PC端使用 安全性:獨佔性和共用鎖定來實現交易處理,支援多進程讀取資料,只能一個進程修改 有五種常用資料類型: NULL:空值 INTEGER:整形 REAL:浮點型 VARCHAR:字元型 BLOB:大資料 注意:SQLite不支援BOOLEAN和DATE,因此可以用0,1代替BOOLEAN(其它資料庫也經常這麼幹)INTEGER或VARCHAR代替DATE,更多參考資料http://www.sqlite.org/ 在Android系統中提供了android.database.sqlite包,用於進行SQLite資料庫的增、刪、改、查工作。其主要方法如下: 1、建立資料庫連接 1 // 建立資料庫的兩種方法,推薦第一種,第二種使用絕對路徑,較繁雜2 SQLiteDatabase db = this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null); 3 SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.example.sqlite/databases/test_db2.db", null);建立完/data/data/com.example.sqlite/databases/ 會有兩個資料庫檔案。 2、建立tab表,有兩個欄位_id和name,其中_id為自增序列,name不為空白。 1 // 建立tab表2 db.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)"); 3、插入資料 複製代碼1 //插入資料2 // 類似map,索引值對儲存資料3 ContentValues values = new ContentValues(); 4 for (int i = 0; i < 5; i++) {5 values.put("name", "test"+i);6 // 插入到資料庫,參數:表名, 指定表中的某列列名,資料7 db.insert("tab", "_id", values);8 }複製代碼 4、修改資料 複製代碼1 // 修改2 ContentValues values2 =new ContentValues();3 values2.put("name", "name");4 // 更改資料,參數分別:表名、新資料、where條件、子句(可為null)5 db.update("tab", values2, "_id=1", null);6 // where條件?為預留位置,最後一個參數可替換預留位置7 db.update("tab", values2, "_id=?", new String[]{"10"});複製代碼將資料庫檔案拷貝到本地電腦可以用 SQLite Expert Personal 3查看,修改後_id為0和10的name列 值都改掉了。 由於我程式執行了4次,多插入3遍,因此有20條記錄。 5、查詢資料 複製代碼 1 //查詢資料兩種方法query、rawQuery 2 // Cursor指遊標,學過資料庫的都知道吧,後面跟一系列參數,目標表名、where子句、order by子句、having子句等可不記,用第二種方法 3 Cursor c = db.query("tab", null, null, null, null, null, null); 4 // 在第一次讀取Cursor對象中的資料時,一定要先移動遊標,否則此遊標的位置在第一條記錄之前,會引發異常 5 c.moveToFirst(); 6 while(!c.isAfterLast()){ 7 int index = c.getColumnIndex("name"); 8 Log.d("SQLite", c.getString(index)); 9 c.moveToNext();10 }11 12 //推薦用這種,不需記那麼多參數13 c = db.rawQuery("select * from tab", null);14 c.moveToFirst();15 while(!c.isAfterLast()){16 int index = c.getColumnIndex("name");17 Log.d("SQLite", c.getString(index));18 c.moveToNext();19 }複製代碼日子列印結果: 針對遊標的常用方法說明: 6、刪除資料和關閉串連 1 // 刪除資料2 db.delete("tab", "_id=? or name=?", new String[]{"8", "test0"});3 4 // 關閉資料庫連接,釋放資源5 db.close(); 實際開發是繼承資料庫的輔助類SQLiteOpenHelper來方便操作的,主要做的工作就是重寫以下兩個方法: onCreate(SQLiteDatabase db) : 當資料庫被首次建立時執行該方法,一般將建立表等初始化操作在該方法中執行。onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):當開啟資料庫時傳入的版本號碼與當前的版本號碼不同時會調用該方法。 除了上述兩個必須要實現的方法外,還可以選擇性地實現onOpen 方法,該方法會在每次開啟資料庫時被調用。 一般的代碼結構: 複製代碼 1 public class DatabaseHelper extends SQLiteOpenHelper { 2 3 private static final String DB_NAME = "mydata.db"; //資料庫名稱 4 private static final int version = 1; //資料庫版本 5 6 public DatabaseHelper(Context context) { 7 super(context, DB_NAME, null, version); 8 // TODO Auto-generated constructor stub 9 }10 11 @Override12 public void onCreate(SQLiteDatabase db) {13 String sql = "create table user(username varchar(20) not null , password varchar(60) not null );"; 14 db.execSQL(sql);15 }16 17 @Override18 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {19 // TODO Auto-generated method stub20 21 }22 23 }