標籤:sqlite sqliteopenhelper sqliterdatabase contentvalues cursor
1.回顧
上篇學習了SharedPreference 的 儲存和擷取;作為補充 說明下 SharedPreference
1)是一種輕型的資料存放區方式
2) 本質是基於 xml檔案的 key-value鍵值對資料
3)通常用來儲存 簡單的配置資訊
4)預設儲存路徑:/data/data/<包名>/shared_prefs目錄下
2.重點
(1)SQLite 的 介紹
(2) 資料類型
(3)優點
(4)SQLiteDataBase
(5)SQLiteOpenHelper
3.介紹
開源的嵌入式資料庫,以單個檔案的形式存在
(1)輕量級,一個動態庫,單檔案
(2)獨立性,沒有依賴,無須安裝
(3)隔離性,全部在檔案夾裡
(4)跨平台
(5)多語言介面
(6)安全性,事務:
通過資料庫上的獨佔性和共用鎖定來實現獨立交易處理;多個線程讀取,一個線程寫入;
4.資料存放區類型
Null Integer Real Text Blob
空 ,整型,浮點型 ,字串值,二進位值 ;動態資料類型( 弱引用),可進行相關資料類型自動轉換
5.優點
佔用資源少 , 效能良好 ,0 管理成本 ;沒有可用與 Sqlite 的網路伺服器 ;
6.實現
建立的 db 檔案儲存體在 data/<包名>/databases/ 下
(1) SQLiteDatabase : 管理資料庫類 建立 刪除 執行 sql命令
例如:建立表的操作
SQLiteDatabase db=openOrCreateDatabase("yuan.db",MODE_PRIVATE,null);db.execSQL("create table if not exists labelnet(_id integer primary key autoincrement,name text not null,pass text not null)");
上面你的 SQLiteDatabase 建立的 db對象 ,可以執行通過 execSQL () 方法可以執行所有的 sql 語句實現增刪改查 (sql 語句太多,就很噁心);
(2)ContentValues 實現
使用 ContentValues實現封裝資料 ,後通過 insert() , update() ,delete() , query() 四個方法實現 增刪改查,只需要傳的參數不一樣就行了;
注意:建立表 還需要的是 sql 語句哦!!!!
例子:
新增:調用上面的db對象 ,新增 20條資料
ContentValues values=new ContentValues();for(int i=0;i<20;i++){values.put("name","原");values.put("pass","123456");//傳回值 為 行的 iddb.insert(DBNAME,null, values);values.clear();}
修改:
ContentValues values=new ContentValues();values.put("pass","111111"); //修改db.update(DBNAME, values,"_id>?",new String[]{"10"});
刪除:
//刪除db.delete(DBNAME,"pass=?",new String[]{"111111"});
查詢:使用 Cursor實現 ,
Cursor cursor=dbs.query(DBNAME,null,"_id>?",new String[]{"0"},null,null,"_id");String str="資料庫讀取資料";if(cursor!=null){//得到 列明稱String [] curName=cursor.getColumnNames();while(cursor.moveToNext()){for(String cn : curName){Log.i("cursor",cursor.getString(cursor.getColumnIndex(cn)));str+=cursor.getString(cursor.getColumnIndex(cn));}Log.i("cursor","...........................................");str+="\n";}}tv_show.setText(str);
7. SQLiteOpenHelper 7.1 介紹
協助你建立一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕鬆的建立資料庫。SQLiteOpenHelper 類根據開發應用程式的需要,封裝了建立和更新資料庫使用的邏輯。
建立類需要繼承 自 SQLiteOpenHelper 類:需要實現幾個方法:onCreate() , onUpgrade() ,和 建構函式
7.2 例子
package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DB extends SQLiteOpenHelper {public DB(Context context, String name) {super(context, name, null, 1);}/** * 首次建立 資料庫的時候調用 * 一般 把建庫 和 鍵表操作 放在這裡 */@Overridepublic void onCreate(SQLiteDatabase db) {// 一般 把建庫 和 鍵表操作 放在這裡db.execSQL("create table if not exists yuantest(_id integer primary key autoincrement,name text not null,pass text not null)");}/** * 當資料庫版本發送改名的時候,自動調用 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //當資料庫版本發送改名的時候,自動調用}}
7.3 使用
(1) getReadableDatabase() 返回 唯讀資料庫
(2)getWritableDatabase() 返回 可讀可寫
實現:
DB db=new DB(this,"yuan.db");SQLiteDatabase dbs=db.getWritableDatabase();
這樣就返回 db對象了,下面的操作 和 6 一樣了
8.Cursor 遊標
不管你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 資料庫遊標,
(1)通過使用 getCount() 方法得到結果集中有多少記錄; (2)通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍曆所有記錄; (3)通過 getColumnNames() 得到欄位名; (4)通過 getColumnIndex() 轉換成欄位號; (5)通過 getString(),getInt() 等方法得到給定欄位目前記錄的值; (6)通過 requery() 方法重新執行查詢得到遊標; (7)通過 close() 方法釋放遊標資源; 使用的時候,一定要釋放遊標資源(佔資源);
9. 總結
ContentValues 實際上和 Map , HashMap 一樣的,需要清空的時候,就調用 clear()方法
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android-資料存放區( SQLite )