package com.talk.demo.persistence; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.text.format.Time; import android.util.Log; import com.talk.demo.setting.RichPresent; import com.talk.demo.types.Friend; import com.talk.demo.types.Record; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DBManager { private static String TAG = "DBManager"; private DBHelper helper; // Get rich values private RichPresent rp; public DBManager(Context context) { helper = new DBHelper(context); rp = RichPresent.getInstance(context); } public void addTime(TimeRecord tr) { /* * 因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory); * 所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里 */ SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "records", tr).insertRecord(); Log.d(TAG, "record insert: "+tr.getTimeRecord().toString()); rp.addRich(2); db.close(); } public void addFriend(FriendRecord fr) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "friends", fr).insertRecord(); db.close(); } public void addRoom(RoomRecord rr) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "rooms", rr).insertRecord(); db.close(); } public void addDialog(DialogRecord dr) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "dialogs", dr).insertRecord(); db.close(); } public void addTag(TagRecord tagr) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "tags", tagr).insertRecord(); db.close(); } public void addTimeFromServer(TimeRecord tr) { SQLiteDatabase db = helper.getWritableDatabase(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("server_id", tr.getTimeRecord().getServerId()); DataOperation doa = new DataOperation(db, "records"); Cursor c = doa.queryCursorWithCond(sortVar); if(c != null && c.moveToFirst()) { Log.d(TAG, "No need to creat new record!"); doa.updateServerId(tr.getTimeRecord().getServerId(),tr.getTimeRecord().getDataId(),tr.getTimeRecord().getSyncState()); } else { addTime(tr); } db.close(); } public void addFriendFromServer(FriendRecord fr) { SQLiteDatabase db = helper.getWritableDatabase(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("server_id", fr.getFriend().getServerId()); DataOperation doa = new DataOperation(db, "friends"); Cursor c = doa.queryCursorWithCond2(sortVar); if(c != null && c.moveToFirst()) { Log.d(TAG, "No need to creat new record!"); doa.updateServerId(fr.getFriend().getServerId(),fr.getFriend().getDataId(),fr.getFriend().getSyncState()); } else { addFriend(fr); } db.close(); } /** * add multiple time records * @param TimeRecord */ public void addMultipleTimes(List<TimeRecord> tRecord) { SQLiteDatabase db = helper.getWritableDatabase(); for (TimeRecord tr : tRecord) { addTime(tr); } db.close(); } public void updateContent(TimeRecord tRecord) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "records").updateContent(tRecord.getTimeRecord().getDataId(), tRecord.getTimeRecord().getContent()); rp.addRich(1); db.close(); } public void updateTag(int id, String tag) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "records").updateTag(id, tag); db.close(); } public void updateDescription(int id, String des) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "friends").updateDescription(id, des); db.close(); } public void updateServerInfo(Record record) { SQLiteDatabase db = helper.getWritableDatabase(); DataOperation dop = new DataOperation(db, "records", new TimeRecord(record)); dop.updateServerId( record.getServerId(),record.getDataId(),record.getSyncState()); db.close(); } public void updateFriendServerInfo(Friend friend) { SQLiteDatabase db = helper.getWritableDatabase(); new DataOperation(db, "friends").updateServerId( friend.getServerId(),friend.getDataId(),friend.getSyncState()); db.close(); } /** * query all content, return list * @return List<TimeRecord> */ public List<TimeRecord> queryTimeWithMultipleParams(String[] params) { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TimeRecord> trList = new ArrayList<TimeRecord>(); String[] whereVar = {"calc_date","calc_date","calc_date","calc_date"}; String[] sortVar = {"calc_date", "create_time"}; Cursor c = new DataOperation(db, "records").queryCursorWithComplexCond(whereVar,sortVar, params); while (c.moveToNext()) { TimeRecord tr = new TimeRecord(); tr.dumpRecord(c); trList.add(tr); } c.close(); db.close(); return trList; } /** * query all content, return list * @return List<TimeRecord> */ public List<TimeRecord> queryTimeWithParam(String param) { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TimeRecord> trList = new ArrayList<TimeRecord>(); String[] whereVar = {"calc_date"}; String[] sortVar = {"calc_date", "create_time"}; Cursor c = new DataOperation(db, "records").queryCursorWithComplexCond(whereVar,sortVar, new String[]{param}); while (c.moveToNext()) { TimeRecord tr = new TimeRecord(); tr.dumpRecord(c); trList.add(tr); } c.close(); db.close(); return trList; } public List<TimeRecord> queryTimeFromOthers(String param) { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TimeRecord> trList = new ArrayList<TimeRecord>(); String[] whereVar = {"link!"}; String[] sortVar = {"calc_date", "create_time"}; Cursor c = new DataOperation(db, "records").queryCursorWithComplexCond(whereVar,sortVar, new String[]{param}); while (c.moveToNext()) { TimeRecord tr = new TimeRecord(); tr.dumpRecord(c); trList.add(tr); } c.close(); db.close(); return trList; } public TimeRecord queryTimeTheParam(int param) { SQLiteDatabase db = helper.getWritableDatabase(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("id", param); Cursor c = new DataOperation(db, "records").queryCursorWithCond(sortVar); TimeRecord tr = new TimeRecord(); if((c != null) && c.moveToFirst()) { tr.dumpRecord(c); } c.close(); db.close(); return tr; } public List<TimeRecord> queryTimeTag(String param) { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TimeRecord> trList = new ArrayList<TimeRecord>(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("tag", param); Cursor c = new DataOperation(db, "records").queryCursorWithCond(sortVar); while (c.moveToNext()) { TimeRecord tr = new TimeRecord(); tr.dumpRecord(c); trList.add(tr); } c.close(); db.close(); return trList; } public FriendRecord queryFriendTheParam(int param) { SQLiteDatabase db = helper.getWritableDatabase(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("id", param); Cursor c = new DataOperation(db, "friends").queryFriendCursorWithCond(sortVar); FriendRecord fr = new FriendRecord(); if((c != null) && c.moveToFirst()) { fr.dumpRecord(c); } c.close(); db.close(); return fr; } public List<DialogRecord> queryDialogTalkPeople(String param) { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<DialogRecord> drList = new ArrayList<DialogRecord>(); Map<String, Object> sortVar = new HashMap<String, Object>(); sortVar.put("link", param); sortVar.put("sender", param); Cursor c = new DataOperation(db, "dialogs").queryCursorWithCondOR(sortVar); while (c.moveToNext()) { DialogRecord dr = new DialogRecord(); dr.dumpRecord(c); drList.add(dr); } c.close(); db.close(); return drList; } /** * query all time records, return list * @return List<TimeRecord> */ public List<TimeRecord> queryTime() { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TimeRecord> trList = new ArrayList<TimeRecord>(); String[] sortVar = {"calc_date", "create_time"}; Cursor c = new DataOperation(db, "records").queryCursorByName(sortVar); while (c.moveToNext()) { TimeRecord tr = new TimeRecord(); tr.dumpRecord(c); Log.d(TAG, "record query: "+tr.getTimeRecord().toString()); trList.add(tr); } c.close(); db.close(); return trList; } /** * query all friend records, return list * @return List<FriendRecord> */ public List<FriendRecord> queryFriend() { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<FriendRecord> frList = new ArrayList<FriendRecord>(); String[] sortVar = {"username"}; Cursor c = new DataOperation(db, "friends").queryCursorByName(sortVar); while (c.moveToNext()) { FriendRecord fr = new FriendRecord(); fr.dumpRecord(c); frList.add(fr); } c.close(); db.close(); return frList; } public List<DialogRecord> queryDialog() { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<DialogRecord> drList = new ArrayList<DialogRecord>(); String[] sortVar = {"calc_date", "create_time"}; Cursor c = new DataOperation(db, "dialogs").queryCursorByName(sortVar); while (c.moveToNext()) { DialogRecord dr = new DialogRecord(); dr.dumpRecord(c); drList.add(dr); } c.close(); db.close(); return drList; } /** * query all tag records, return list * @return List<TagRecord> */ public List<TagRecord> queryTag() { SQLiteDatabase db = helper.getWritableDatabase(); ArrayList<TagRecord> tagrList = new ArrayList<TagRecord>(); String[] sortVar = {"tagname"}; Cursor c = new DataOperation(db, "tags").queryCursorByName(sortVar); while (c.moveToNext()) { TagRecord tagr = new TagRecord(); tagr.dumpRecord(c); tagrList.add(tagr); } c.close(); db.close(); return tagrList; } }