Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習日記13--數據存儲之SQLite

android學習日記13--數據存儲之SQLite

編輯:關於Android編程

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     @Override 12     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     @Override 18     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 19         // TODO Auto-generated method stub 20   21     } 22   23 }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved