# SimpleKV **Repository Path**: SimenHi/SimpleKV ## Basic Information - **Project Name**: SimpleKV - **Description**: SimpleKV是介于SharePreferences和ContentProvider之间的轻量型Key-Value数据库 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-05-22 - **Last Updated**: 2023-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SimpleKV SimpleKV是介于SharePreferences和ContentProvider之间的轻量型Key-Value数据库: * 1.和SharePreferences相比,SimpleKV可以存储大量的缓存数据 * 2.和ContentProvider相比,SimpleKV使用简单,便于快速搭建Key-Value型数据库 * 3.SimpleKV具有好用完整的增删改查接口,并支持条件查询 * 4.在只存储KV类型的数据时,SimpleKV比GreenDao具有更少的操作代码和更易懂的接口 在Application中添加初始化代码后即可使用 ```java //初始化主程序 KVManager.getInstance().init(this); //添加字符型主键表 KVManager.getInstance().addTable(Constants.DB1, String.class); ``` 插入操作(SimpleKV插入数据时会先查询表中是否已存在这项key值,如果已存在,将只是修改为最新值): ```java KVManager.getInstance().update(Constants.DB1, "key", "hellos"); ``` GreenDao安全插入操作: ```java public static void storageNetworkData(Context context, String key, String content) { if (TextUtils.isEmpty(content) || context == null) return; final long now = System.currentTimeMillis(); Caches caches = new Caches(null, key, content, now, now, DaoMaster.SCHEMA_VERSION); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, Constants.CACHESDB, null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); CachesDao cachesDao = daoMaster.newSession().getCachesDao(); List cachesList = cachesDao.queryBuilder().where(CachesDao.Properties.Name .eq(key)).list(); try { if (cachesList == null || cachesList.isEmpty()) { cachesDao.insert(caches); } else { Caches newCaches = cachesList.get(0); newCaches.setName(caches.getName()); newCaches.setContent(caches.getContent()); newCaches.setVersion(caches.getVersion()); newCaches.setLasttime(caches.getLasttime()); cachesDao.update(newCaches); } } catch (SQLiteFullException e) { } finally { db.close(); } } ``` 查询操作(SimpleKV支持条件查询): ```java Where where = new Where(); //查询过去3分钟的记录 long TimeMillis = System.currentTimeMillis(); where.beforeCreate(Long.toString(TimeMillis), true).And().afterCreate(Long.toString (TimeMillis - 3 * 60 * 1000), true); //指定结果按照createtime降序排列 where.orderBy(Where.DESC, Columns.CREATETIMENAME); //从结果中最多取10个数据 where.sub(0, 10); List list = KVManager.getInstance().getKVs(Constants.DB3, where); Iterator iterator = list.iterator(); while (iterator.hasNext()) { KV item = iterator.next(); Log.d(TAG, "getALL: " + item.getId() + " " + item.getKey() + " " + item.getValue()); } ``` GreenDao查询数据: ```java public static Cache loadCacheContent(Context context, String key, long timeout) { if (context == null) { return null; } DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, Constants.CACHESDB, null); SQLiteDatabase db = helper.getReadableDatabase(); DaoMaster daoMaster = new DaoMaster(db); CachesDao cachesDao = daoMaster.newSession().getCachesDao(); List cachesList = cachesDao.queryBuilder().where(CachesDao.Properties.Name.eq(key)).list(); db.close(); Caches newCaches; if (cachesList == null || cachesList.isEmpty() || (newCaches = cachesList.get(0)).getVersion() != DaoMaster.SCHEMA_VERSION) { return null; } final long cachetime = newCaches.getLasttime(); if ((System.currentTimeMillis() - cachetime) < timeout || timeout == 0) { //内容未超时 return new Cache(newCaches.getContent(), cachetime, false); } return new Cache(newCaches.getContent(), cachetime, true); } ``` 删除操作: ```java KVManager.getInstance().remove(Constants.DB1,"key"); ``` Gradle: ```java implementation 'com.simen.kv:SimpleKV:1.7.3' ```