Android採用關係型數據庫SQLite3,它是一個支持SQL輕量級的嵌入式數據庫,在嵌入式操做系統上有很普遍的應用,WM採用的也是SQLite3
關於過於、原理方面的東西在這篇文章裏不會提到,可是若是你想可以快速的學會操做SQLite3,那這就是你要找的文章!
首先,咱們看一下api,全部數據庫相關的接口、類都在android.database和android.database.sqlite兩個包下,雖然只有兩個包,可是若是你英文很差或是太懶的話也要迷茫一段時間,其實,咱們真正用的到的沒有幾個!
一、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)
這是一個抽象類,關於抽象類咱們都知道,若是要使用它,必定是繼承它!
這個類的方法不多,有一個構造方法
SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
參數不作過多的解釋,CursorFactory通常直接傳null就能夠
public void onCreate(SQLiteDatabase db)
此方法在建立數據庫是被調用,因此,應該把建立表的操做放到這個方法裏面,一下子在後面咱們會再詳細的說如何建立表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
從方法名上咱們就能知道這個方法是執行更新的,沒錯,當version改變是系統會調用這個方法,因此在這個方法裏應該執行刪除現有表,而後手動調用onCreate的操做
SQLiteDatabase getReadableDatabase()
獲取可讀的SQLiteDatabase對象
SQLiteDatabase getWritableDatabase()
獲取可寫的SQLiteDatabase對象
二、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)
關於操做數據庫的工做(增、刪、查、改)都在這個類裏
execSQL(sql)
執行SQL語句,用這個方法+SQL語句能夠很是方便的執行增、刪、查、改
除此以外,Android還提供了功過方法實現增、刪、查、改
long insert(TABLE_NAME, null, contentValues)添加記錄
int delete(TABLE_NAME, where, whereValue)刪除記錄
int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄
Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄
除此以外,還有不少方法,如:beginTransaction()開始事務、endTransaction()結束事務...有興趣的能夠本身看api,這裏就很少贅述了
三、Cursor(android.database.Cursor)
遊標(接口),這個很熟悉了吧,Cursor裏的方法很是多,經常使用的有:
boolean moveToPosition(position)將指針移動到某記錄
getColumnIndex(Contacts.People.NAME)按列名獲取id
int getCount()獲取記錄總數
boolean requery()從新查詢
boolean isAfterLast()指針是否在末尾
boolean isBeforeFirst()時候是開始位置
boolean isFirst()是不是第一條記錄
boolean isLast()是不是最後一條記錄
boolean moveToFirst()、 boolean moveToLast()、 boolean moveToNext()同moveToPosition(position)
四、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)
也許你會奇怪了,以前我還說過關於數據庫的操做都在database和database.sqlite包下,爲何把一個Adapter放到這裏,若是你用過Android的SQLite3,你必定會知道
,這是由於咱們對數據庫的操做會常常跟列表聯繫起來
常常有朋友會在這出錯,但其實也很簡單
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.list,
myCursor,
new String[] {DB.TEXT1,DB. TEXT2},
new int[]{ R.id.listTextView1,R.id.listTextView2 });
myListView.setAdapter(adapter);
一共5個參數,具體以下:
參數1:Content
參數2:佈局
參數3:Cursor遊標對象
參數4:顯示的字段,傳入String[]
參數5:顯示字段使用的組件,傳入int[],該數組中是TextView組件的id
到這裏,關於數據庫的操做就結束了,可是到目前爲止我只作了翻譯的工做,有些同窗可能仍是沒有掌握,放心,下面咱們一塊兒順着正常開發的思路理清一下頭緒!
前面的只是幫沒作過的朋友作下普及,下面纔是你真正須要的!
1、寫一個類繼承SQLiteOpenHelpe
public class DatabaseHelper extends SQLiteOpenHelper
構造方法:
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
在onCreate方法裏寫建表的操做
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE tb_test (_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT NOT NULL,class_ysbj TEXT NOT NULL,title TEXT NOT NULL,content_ysbj TEXT NOT NULL)";
db.execSQL(sql);//須要異常捕獲
}
在onUpgrade方法裏刪除現有表,而後手動調用onCtreate建立表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "drop table "+tbname;
db.execSQL(sql);
onCreate(db);
}
定義對錶增、刪、查、改的方法,這裏用的是SQLiteOpenHelper提供的方法,也能夠用sql語句實現,都是同樣的
關於獲取可讀/可寫SQLiteDatabase,我不說你們也應該會想到,只有查找纔會用到可讀的SQLiteDatabase
/**
* 添加數據
*/
public long insert(String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();//獲取可寫SQLiteDatabase對象
//ContentValues相似map,存入的是鍵值對
ContentValues contentValues = new ContentValues();
contentValues.put("tname", tname);
contentValues.put("tage", tage);
contentValues.put("ttel", ttel);
return db.insert(tbname, null, contentValues);
}
/**
* 刪除記錄
* @param _id
*/
public void delete(String _id){
SQLiteDatabase db= getWritableDatabase();
db.delete(tbname,
"_id=?",
new String[]{_id});
}
/**
* 更新記錄的,跟插入的很像
*/
public void update(String _id,String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("tname", tname);
contentValues.put("tage", tage);
contentValues.put("ttel", ttel);
db.update(tbname, contentValues,
"_id=?",
new String[]{_id});
}
/**
* 查詢全部數據
* @return Cursor
*/
public Cursor select(){
SQLiteDatabase db = getReadableDatabase();
return db.query(
tbname,
new String[]{"_id","tname","tage","ttel","taddr"},
null,
null, null, null, "_id desc");
}
關於db.query方法的參數,有不少,爲了防止你們弄亂,我簡單說一下
參數1:表名
參數2:返回數據包含的列信息,String數組裏放的都是列名
參數3:至關於sql裏的where,sql裏where後寫的內容放到這就好了,例如:tage>?
參數4:若是你在參數3裏寫了?(知道我爲何寫tage>?了吧),那個這裏就是代替?的值 接上例:new String[]{"30"}
參數5:分組,不解釋了,不想分組就傳null
參數6:having,想不起來的看看SQL
參數7:orderBy排序
到這裏,你已經完成了代碼最多的第一步!咱們來看看都用到了那些類:
SQLiteOpenHelper咱們繼承使用的
SQLiteDatabase增刪查改都離不開它,即便你直接用sql語句,也要用到execSQL(sql)
2、這裏無非是對DatabaseHelper類定義方法的調用,沒什麼可說的,不過我仍是對查詢再嘮叨幾句吧
Android查詢出來的結果一Cursor形式返回
cursor = sqLiteHelper.select();//是否是很簡單?
查詢出來的cursor通常會顯示在listView中,這就要用到剛纔提到的SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.list_row,
cursor,
new String[]{"tname","ttel"},
new int[]{R.id.TextView01,R.id.TextView02}
);html
是否是很簡單呢,任何複雜的工程都是經過簡單的代碼實現的.java