package com.talk.demo.persistence; import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import java.util.Map; public class DataOperation { private static final String TAG = "DataOperation"; private CommonRecord commonRec; private SQLiteDatabase innerDB; private Cursor innerCursor; private String table_name; public DataOperation(SQLiteDatabase db, String tab_name) { innerDB = db; table_name = tab_name; } public DataOperation(SQLiteDatabase db, String tab_name, CommonRecord record) { innerDB = db; table_name = tab_name; commonRec = record; } public DataOperation(CommonRecord record, Cursor cursor) { commonRec = record; innerCursor = cursor; } public void insertRecord() { innerDB.beginTransaction(); //开始事务 try { int num_items = commonRec.getNumItems(); StringBuilder sqlValue = new StringBuilder(" VALUES(null"); for(int i=0; i<num_items;i++) { sqlValue.append(" ,?"); } sqlValue.append(")"); Object[] obj_items = new Object[num_items]; commonRec.getObjectItems(obj_items); innerDB.execSQL("INSERT INTO "+table_name+"" + sqlValue.toString(), obj_items); innerDB.setTransactionSuccessful(); //设置事务成功完成 } finally { innerDB.endTransaction(); //结束事务 } } public void dumpRecord() { commonRec.dumpRecord(innerCursor); } public Cursor queryCursorByName(String[] sortVar) { StringBuilder sqlValue = new StringBuilder(" ORDER BY "); for(int i=0;i<sortVar.length;i++) { sqlValue.append(sortVar[i]); sqlValue.append(" DESC"); if(i != sortVar.length -1) sqlValue.append(","); } Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString(), null); return c; } public Cursor queryCursorWithCond(Map<String, Object> queryVar) { StringBuilder sqlValue = new StringBuilder(" WHERE "); for(String key: queryVar.keySet()) sqlValue.append(key + "='" +queryVar.get(key)+"'"); Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString() +" ORDER BY calc_date DESC, create_time DESC", null); return c; } public Cursor queryCursorWithCond2(Map<String, Object> queryVar) { StringBuilder sqlValue = new StringBuilder(" WHERE "); for(String key: queryVar.keySet()) sqlValue.append(key + "='" +queryVar.get(key)+"'"); Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString(), null); return c; } public Cursor queryCursorWithCondOR(Map<String, Object> queryVar) { StringBuilder sqlValue = new StringBuilder(" WHERE "); for(String key: queryVar.keySet()) { sqlValue.append(key + "='" +queryVar.get(key)+"'"); sqlValue.append(" OR "); } //revert last 'or' sqlValue.delete(sqlValue.length()-4, sqlValue.length()); Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString() +" ORDER BY calc_date DESC, create_time DESC", null); return c; } public Cursor queryFriendCursorWithCond(Map<String, Object> queryVar) { StringBuilder sqlValue = new StringBuilder(" WHERE "); for(String key: queryVar.keySet()) sqlValue.append(key + "='" +queryVar.get(key)+"'"); Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString(), null); return c; } public Cursor queryCursorWithComplexCond(String[] whereVar, String[] sortVar, String[] params) { StringBuilder sqlValue = new StringBuilder(" WHERE "); for(int i=0;i<whereVar.length;i++) { sqlValue.append(whereVar[i]); sqlValue.append("=?"); if(i != whereVar.length -1) sqlValue.append(" OR "); } sqlValue.append(" ORDER BY "); for(int i=0;i<sortVar.length;i++) { sqlValue.append(sortVar[i]); sqlValue.append(" DESC"); if(i != sortVar.length -1) sqlValue.append(","); } Cursor c = innerDB.rawQuery("SELECT * FROM "+table_name +sqlValue.toString(), params); return c; } public void updateServerId(int server_id, int cid, long sync_time) { ContentValues cv = new ContentValues(); Log.d(TAG,"update id: "+cid); //set dirty flag : 0 cv.put("dirty", 0); cv.put("server_id", server_id); cv.put("sync_time", sync_time); innerDB.update(table_name, cv, "id" + "='" +cid+"'", null); } public void updateTag(int id, String tag) { ContentValues cv = new ContentValues(); cv.put("tag", tag); Log.d(TAG,"update id: "+id); innerDB.update(table_name, cv, "id" + "='" +id+"'", null); } public void updateDescription(int id, String des) { ContentValues cv = new ContentValues(); cv.put("description", des); Log.d(TAG,"update description: "+des); innerDB.update(table_name, cv, "id" + "='" +id+"'", null); } public void updateContent(long cid, String content) { ContentValues cv = new ContentValues(); cv.put("content", content); Log.d(TAG,"update id: "+cid); innerDB.update(table_name, cv, "id" + "='" +cid+"'", null); } }