package com.jasonchen.microlang.database; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.jasonchen.microlang.beans.AtUserBean; import com.jasonchen.microlang.database.table.AtUsersTable; import com.jasonchen.microlang.debug.AppLogger; import java.util.ArrayList; import java.util.List; /** * jasonchen * 2015/04/17 */ public class AtUsersDBTask { private AtUsersDBTask() { } private static SQLiteDatabase getWsd() { DatabaseHelper databaseHelper = DatabaseHelper.getInstance(); return databaseHelper.getWritableDatabase(); } private static SQLiteDatabase getRsd() { DatabaseHelper databaseHelper = DatabaseHelper.getInstance(); return databaseHelper.getReadableDatabase(); } public static void add(AtUserBean atUserBean, String accountId) { add(getWsd(), atUserBean, accountId); } public static void add(SQLiteDatabase db, AtUserBean atUserBean, String accountId) { Gson gson = new Gson(); ContentValues cv = new ContentValues(); cv.put(AtUsersTable.USERID, atUserBean.getUid()); cv.put(AtUsersTable.ACCOUNTID, accountId); String json = gson.toJson(atUserBean); cv.put(AtUsersTable.JSONDATA, json); db.replace(AtUsersTable.TABLE_NAME, AtUsersTable.ID, cv); reduce(accountId); } public static List<AtUserBean> get(String accountId) { return get(getWsd(), accountId); } public static List<AtUserBean> get(SQLiteDatabase db, String accountId) { List<AtUserBean> msgList = new ArrayList<AtUserBean>(); String sql = "select * from " + AtUsersTable.TABLE_NAME + " where " + AtUsersTable.ACCOUNTID + " = " + accountId + " order by " + AtUsersTable.ID + " desc"; Cursor c = db.rawQuery(sql, null); Gson gson = new Gson(); while (c.moveToNext()) { String json = c.getString(c.getColumnIndex(AtUsersTable.JSONDATA)); try { AtUserBean value = gson.fromJson(json, AtUserBean.class); msgList.add(value); } catch (JsonSyntaxException e) { AppLogger.e(e.getMessage()); } } c.close(); return msgList; } private static void reduce(String accountId) { reduce(getWsd(), accountId); } private static void reduce(SQLiteDatabase db, String accountId) { String searchCount = "select count(" + AtUsersTable.ID + ") as total" + " from " + AtUsersTable.TABLE_NAME + " where " + AtUsersTable.ACCOUNTID + " = " + accountId; int total = 0; Cursor c = db.rawQuery(searchCount, null); if (c.moveToNext()) { total = c.getInt(c.getColumnIndex("total")); } c.close(); int needDeletedNumber = total - 15; if (needDeletedNumber > 0) { String sql = " delete from " + AtUsersTable.TABLE_NAME + " where " + AtUsersTable.ID + " in " + "( select " + AtUsersTable.ID + " from " + AtUsersTable.TABLE_NAME + " where " + AtUsersTable.ACCOUNTID + " in " + "(" + accountId + ") order by " + AtUsersTable.ID + " asc limit " + needDeletedNumber + " ) "; db.execSQL(sql); } } static void clear(String accountId) { String sql = "delete from " + AtUsersTable.TABLE_NAME + " where " + AtUsersTable.ACCOUNTID + " in " + "(" + accountId + ")"; getWsd().execSQL(sql); } }