Android中使用数据库保存数据

代码如下:


/**
 * Created by SongWei on 2017/3/14.
 * Only used in Debug build type, make sure which build type the client is.
 */
public class PushReceivedCollector {
    private static final String TAG = "PushReceivedCollector";
    private static final String TABLE_PUSH_ITEM = "push_item";
    private static final String DB_NAME = "push_received.db";
    private static PushOpenHelper pushOpenHelper;

    private static synchronized PushOpenHelper getHelper(Context c) {
        if (pushOpenHelper == null) {
            pushOpenHelper = new PushOpenHelper(c);
        }
        return pushOpenHelper;
    }

    private static class PushOpenHelper extends SQLiteOpenHelper {
        private static final int DATABASE_VERSION = 2;

        private PushOpenHelper(Context context) {
            super(context, DB_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            createPushItemTable(db);
            //TODO:Add More Table Here
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //TODO:Update Database Here
            switch (oldVersion) {
                case 1:
                    addSavedColumnInPushItemTable(db);
                    ZLog.d(TAG, "push_received.db updated from oldVersion: " + oldVersion + " to newVersion:" + newVersion);
                    break;
                default:
                    break;
            }
        }
    }

    static void createPushItemTable(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_PUSH_ITEM + "("
                + DataContract.PushItemsColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + DataContract.PushItemsColumns.TASK_ID + " TEXT,"
                + DataContract.PushItemsColumns.PUSH_TYPE + " INTEGER,"
                + DataContract.PushItemsColumns.TIMESTAMP + " INTEGER,"
                + DataContract.PushItemsColumns.CONFIG + " TEXT,"
                + DataContract.PushItemsColumns.STATUS + " INTEGER,"
                + DataContract.PushItemsColumns.RETRIES + " INTEGER,"
                + DataContract.PushItemsColumns.SAVED + " INTEGER" //1:true, 0:false
                + ");");
    }

    private static void addSavedColumnInPushItemTable(SQLiteDatabase db) {
        db.execSQL("ALTER TABLE " + TABLE_PUSH_ITEM + " ADD COLUMN " + DataContract.PushItemsColumns.SAVED + " INTEGER default 1");
    }

    //main entry
    public static boolean insertPushItem(final Context c, final PushItem item, boolean saved) {
        if (null == c || null == item) {
            return false;
        }
        ContentValues cv = new ContentValues(7);
        cv.put(DataContract.PushItemsColumns.TASK_ID, item.getTaskId() == null ? "" : item.getTaskId());
        cv.put(DataContract.PushItemsColumns.PUSH_TYPE, item.getPushType().value);
        cv.put(DataContract.PushItemsColumns.TIMESTAMP, item.getTimestamp());
        cv.put(DataContract.PushItemsColumns.CONFIG, item.getConfig() == null ? "" : item.getConfig());
        cv.put(DataContract.PushItemsColumns.STATUS, item.getStatus().value);
        cv.put(DataContract.PushItemsColumns.RETRIES, item.getRetries());
        cv.put(DataContract.PushItemsColumns.SAVED, saved ? "1" : "0");
        Cursor cursor = null;
        try {
            SQLiteDatabase db = getHelper(c).getWritableDatabase();
            long last_id = db.insert(TABLE_PUSH_ITEM, null, cv);
            cursor = db.query(TABLE_PUSH_ITEM, null, null, null, null, null, null);
            if (cursor != null && cursor.getCount() > 200) {
                db.delete(TABLE_PUSH_ITEM, DataContract.PushItemsColumns._ID + " < ?", new String[]{String.valueOf(last_id - 100)});
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            IOUtils.closeQuietly(cursor);
        }
        return true;
    }

    public static List<DebugPushItem> queryAll(final Context c) {
        ArrayList<DebugPushItem> debugPushItems = new ArrayList<>();
        Cursor cursor = null;
        try {
            cursor = getHelper(c).getWritableDatabase().query(TABLE_PUSH_ITEM,
                    null,
                    null,
                    null,
                    null,
                    null,
                    DataContract.PushItemsColumns._ID + " DESC");
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    String taskId = cursor.getString(cursor.getColumnIndex(DataContract.PushItemsColumns.TASK_ID));
                    int pushType = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.PUSH_TYPE));
                    long timestamp = cursor.getLong(cursor.getColumnIndex(DataContract.PushItemsColumns.TIMESTAMP));
                    String config = cursor.getString(cursor.getColumnIndex(DataContract.PushItemsColumns.CONFIG));
                    int status = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.STATUS));
                    int retries = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.RETRIES));
                    boolean saved = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.SAVED)) == 1;
                    DebugPushItem item = new DebugPushItem(taskId, pushType, timestamp, config, status, retries, saved);
                    debugPushItems.add(item);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(cursor);
        }
        return debugPushItems;
    }

    private static PushStatus getStatusByValue(int value) {
        switch (value) {
            case 0:
                return PushStatus.INIT;
            case 1:
                return PushStatus.ON_GOING;
            case 2:
                return PushStatus.DONE;
            default:
                return PushStatus.INIT;
        }
    }

    public static class DebugPushItem {
        public PushItem pushItem;
        public boolean saved;

        DebugPushItem(String taskId, int pushType, long timestamp, String config, int status, int retries, boolean saved) {
            this.pushItem = new PushItem();
            this.pushItem.setTaskId(taskId);
            this.pushItem.setPushType(PushType.valueOf(pushType));
            this.pushItem.setTimestamp(timestamp);
            this.pushItem.setConfig(config);
            this.pushItem.setStatus(getStatusByValue(status));
            this.pushItem.setRetries(retries);
            this.saved = saved;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值