在Android平臺上,集成了一個嵌入式關係型數據庫—SQLite,它是一種非常輕量的數據庫管理系統,SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字符串文本)和BLOB(二進制對象)數據類型,SQLite通過文件來保存數據庫,一個文件就是一個數據庫。
- 常用類介紹
- SQLiteOpenHelper
數據庫輔助抽象類,通過實現它的子類可以創建數據庫以及實現版本更新,通過getWriteableDatabase獲得getReadableDatabase獲取數據庫訪問類
-SQLiteDatabase:數據庫訪問類
通過數據庫訪問類,可以實現對數據庫的增刪改查等操作
Android創建Sqlite數據庫
SQLite數據庫是在第一次調用的時候創建數據庫的
創建數據庫的步驟:
1.定義一個db輔助類,繼承SQLiteOpenHelper抽象類,通過構造方法設置數據庫名及版本信息。
2. 重寫onCreate()方法,該方法只會在數據庫第一次創建的時候調用,在此方法中適合做數據庫初始化操作,比如創建數據表等。
3. 重寫onUpGrade() , 當數據庫版本更新時調用,適合做表結構的修改或者添加刪除表。
* 參考代碼:
/**
* 數據庫輔助類的構造方法,當數據庫存在,則直接返回,沒有則創建數據庫,並調用onCreate()初始化數據庫
* @param context:上下文
* @param name :數據庫名 以文件的形式保存
* @param factory :遊標工廠,一般是由系統來提供
* @param version :版本 最小爲1的整數
*/
public DBHelper(Context context) {
super(context, NAME, null, VERSION);
}
/**
* 當初始化數據庫的時候調用,在這裏進行數據表的創建,相應初始數據的添加
*/
@Override
public void onCreate(SQLiteDatabase db) {
//創建book表
String sqlStr="create table t_book(_id integer primary key autoincrement ,name text ,price integer)";
//執行sql語句
db.execSQL(sqlStr);
}
/**
* 當版本要更新的時候調用,一般實現數據表結構的修改,
* 添加刪除表,當newVersion 大於oldVersion時調用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists t_book ");
onCreate(db);
System.out.println("onUpgrade");
}
SQLite數據庫增刪改查
1 添加記錄
public int save(ContentValues values){
//取得SqliteDatabase 對象來對數據庫進行增刪改查
SQLiteDatabase db=dbHelper.getWritableDatabase();
/**
* 1、table:表名
* 2、nullColumnHack:當values爲null時 ,默認填充要插入的字段
* 3、ContentValues:內容值,好比HashMap
*/
Long row=db.insert(TABLE, null, values);
// insert into table (name,price) values("鬼吹燈1","35")
//假如 ContentValues爲空 :insert into table(null)values (null)
//關閉數據庫
db.close();
return row.intValue();
}
2 刪除記錄
//刪除一條記錄
public int delete(int id){
SQLiteDatabase db=dbHelper.getWritableDatabase();
/**
* table:表名
* whereClause:條件
* whereArgs:條件佔位符 id=? new String[]{id}
*/
int num=db.delete(TABLE, " id=? ", new String[]{String.valueOf(id)});
db.close();
return num;
}
3 查詢
//查找所有記錄
public ArrayList<HashMap<String, Object>> find(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
ArrayList<HashMap<String,Object>>data=new ArrayList<HashMap<String,Object>>();
Cursor cursor=db.query(TABLE, null, null, null, null, null, PRICE+" desc");
while(cursor.moveToNext()){
HashMap<String, Object> map=new HashMap<String, Object>();
map.put(ID, cursor.getInt(cursor.getColumnIndex(ID)));
map.put(NAME, cursor.getString(cursor.getColumnIndex(NAME)));
map.put(PRICE, cursor.getInt(cursor.getColumnIndex(PRICE)));
data.add(map);
}
db.close();
return data;
}
/**
* 查尋數據庫中的數據,返回的值爲Cursor類型
*/
public Cursor findByCursor(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
Cursor cursor=db.query(TABLE, null, null, null, null, null,null);
//用Cursor返回 ,不能關閉數據庫
return cursor;
}
4 更新記錄
/**
* 記錄更新
* @param values
* @return
*/
public int update(ContentValues values){
//更新某條記錄 傳一個Id過來
String id=values.getAsString(ID);
SQLiteDatabase db=dbHelper.getWritableDatabase();
int num=db.update(TABLE, values, " id=?", new String[]{id});
db.close();
//關閉數據庫
return num;
}
SQLite事務處理
/**
* 一條記錄更新
* @param values
* @return
*/
public int update(ContentValues values){
//更新某條記錄 傳一個Id過來
String id=values.getAsString(ID);
SQLiteDatabase db=dbHelper.getWritableDatabase();
int num=db.update(TABLE, values, " id=?", new String[]{id});
db.close();
//關閉數據庫
return num;
}
寫博客純屬個人愛好,如果又不對的地方,歡迎吐槽。