1、将sqlite的最轻量orm框架优化
2、添加方法同步锁
private Lock writeLock = new reentrantlock(); private volatile boolean writeLocked = false; private voID lock() { writeLock.lock(); writeLocked = true; } private voID unlock() { if (writeLocked) { writeLock.unlock(); writeLocked = false; } } /** * 保存 * @param obj */ public voID save(Object obj) { if (obj == null) return; try{ lock(); checkOrCreatetable(obj.getClass()); sqlProxy proxy = sqlProxy.save(obj); db.execsql(proxy.getsql(),proxy.paramsArgs()); }finally{ unlock(); } }
3、添加数据库表字段动态增删改
/** * 检查表 * @param clazz */ private voID checkOrCreatetable(Class<?> clazz) { EntityInfo entity = EntityInfo.build(clazz); if (entity.isChecked()) return; Cursor cursor = db.rawquery("SELECT name FROM sqlite_master WHERE type='table' and name='"+entity.gettable()+"' order by name",null); Integer count = cursor != null ? cursor.getCount() : null; if(cursor != null) cursor.close(); if(count != null && count > 0){ String [] columnnames = getColumnnames(db,entity.gettable()); if(columnnames != null && columnnames.length > 0){ if(changetable(clazz,columnnames)){ String columns = ""; boolean first = true; List<ColumnInfo> List = entity.getColumnList(); for(int i=0,length=columnnames.length;i<length;i++){ for(ColumnInfo mColumnInfo : List){ if(mColumnInfo.getColumname().equals(columnnames)){ columns += (first ? "" : ",")+columnnames; first = false; } } } if(TextUtils.isEmpty(columns)){ //删除 db.execsql("DROP table " + entity.gettable()); //创建表 String sql = getCreattablesql(clazz); db.execsql(sql); }else{ String temptablename = entity.gettable() + "_temp"; //表重命名 db.execsql("ALTER table " + entity.gettable() + " REname TO " + temptablename); //创建表 String sql = getCreattablesql(clazz); db.execsql(sql); //旧数据转移 db.execsql("INSERT INTO "+entity.gettable()+"("+columns+") SELECT "+columns+" FROM "+temptablename); //删除临时表 db.execsql("DROP table "+temptablename); } } }else{ //删除 db.execsql("DROP table " + entity.gettable()); //创建表 String sql = getCreattablesql(clazz); db.execsql(sql); } }else{ //创建表 String sql = getCreattablesql(clazz); db.execsql(sql); } entity.setChecked(true); }
4、本框架没有链表查询功能,int、Integer、long、Long、float、float、double、Double、Boolean、String、Date以外字段利用GSON中的 Gson .toJson( Object src, Type typeOfSrc)获得Json数据插入数据库,读取使用 .fromJson( String Json,sans-serif; Font-size:14px; line-height:21px">typeOfT)获得相应对象,具体看DEMO
/** * 获取属性 * @param o * @param info * @return */ public static Object getProperty(Object o,ColumnInfo info){ try { if(info.isBean()){ FIEld f = info.getFIEld(); f.setAccessible(true); Object value = f.get(o); Gson gson = new GsonBuilder().create(); return gson.toJson(value,f.getGenericType()); }else{ FIEld f = info.getFIEld(); f.setAccessible(true); return f.get(o); } } catch (Exception e) { e.printstacktrace(); } return null; }
/** * 添加屬性 * @param o * @param info * @param value */ public static voID setProperty(Object o,ColumnInfo info,Object value){ try { if(info.isBean()){ FIEld f = info.getFIEld(); Gson gson = new GsonBuilder().create(); Object obj = gson.fromJson((String) value,f.getGenericType()); f.setAccessible(true); f.set(o,obj); }else{ FIEld f = info.getFIEld(); f.setAccessible(true); f.set(o,value); } } catch (Exception e) { e.printstacktrace(); } }
云盘DEMO下载
总结以上是内存溢出为你收集整理的极速开发框架dhroid之sqlite优化全部内容,希望文章能够帮你解决极速开发框架dhroid之sqlite优化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)