SQLite的教學可以參考Vogella,寫得相當完整且英文描述也非常的平易近人
教學文中主要將使用SQLite存取資料的功能分成三個物件
包括了:
- 自訂的SQLiteOpenHelper(用來執行資料庫的一些任務)
- Getter & Setter(存取資料)
- 還有資料存取物件(Data Access Object,DAO,為連結以上兩者的橋樑)
以下分別介紹這三者的起手式。
Custom SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
// DATABASE.NAME(String)與DATABASE.VERSION(int)都是我自訂interface的數值
// 分別代表資料庫的名稱與版本
super(context, DATABASE.NAME, null, DATABASE.VERSION);
}
// 資料庫一開始建置時會執行的動作將在onCreate生命週期中觸發
@Override
public void onCreate(SQLiteDatabase db) {
// 這邊和SQL很像,就用你熟悉的方式輸入指令
String sql = "CREATE TABLE IF NOT EXISTS " + DATABASE.TABLE +
" (" +
" " + DATABASE.UID + " TEXT," +
" " + DATABASE.DID + " TEXT," +
" " + DATABASE.TIME + " DATETIME," +
" " + DATABASE.RID + " TEXT" +
");";
// 執行
db.execSQL(sql);
}
// 若發現更新後的資料庫(版本不一樣時),刪除原本的資料庫,並建置一個新的
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + DATABASE.TABLE;
db.execSQL(sql);
onCreate(db);
}
}
Getters & Setters
public class UserHistory {
private String uid;
private String did;
private String time;
private String rid;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getDid() {
return did;
}
public void setDid(String did) {
this.did = did;
}
public String getTime() {
return time;
}
... // 以此類推
Data Access Object
// 這邊是最重要的部分,所有有關資料存取的動作我們都在這裡調用
// 如此一來就不需要動到以上兩個物件,妥善隱藏資料的本質
public class HistoryDAO {
private SQLiteDatabase database;
private DBHelper dbHelper;
public HistoryDAO(Context context) {
dbHelper = new DBHelper(context);
}
// 開啟資料庫
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
// 關閉資料庫
public void close() {
dbHelper.close();
}
// 輸入資料到資料庫中
public void insert(String uid, String did, String rid) {
// 使用key/value的方式儲存資料,再丟給資料庫insert
ContentValues values = new ContentValues();
values.put(DATABASE.UID, uid);
values.put(DATABASE.DID, did);
values.put(DATABASE.TIME, getCurrentTime());
values.put(DATABASE.RID, rid);
database.insert(DATABASE.TABLE, null, values);
}
// 因為我們在台灣,需要調整時區,以獲得使用者產生互動的正確時間
private String getCurrentTime() {
// 註1
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String currentTime = dateFormat.format(new java.util.Date());
return currentTime;
}
// 這邊因為我在測試是不是真的有輸入成功,於是在進行query後取得數量
public int size() {
Cursor cursor = database.query(DATABASE.TABLE, new String[] {
DATABASE.UID,
DATABASE.DID,
DATABASE.TIME,
DATABASE.RID }, null, null, null, null, null);
return cursor.getCount();
}
}
註1:時間的格式有標準的規定,例如年份並不支援大寫Y。
SQLite也很有個性,有它自己能接受的時間格式。(繁體中文版本)
藉由以上三個物件的實作,已經可以應付最基礎的資料存取功能。
儲存完使用者的歷史紀錄之後,接著就要開始著手偏好分析。
Reference,
JAVA的日期時間取得 @ ROACH部落落 :: 痞客邦 PIXNET ::