极速开发框架dhroid之sqlite优化

极速开发框架dhroid之sqlite优化,第1张

概述1、将sqlite的最轻量orm框架优化 2、添加方法同步锁 private Lock writeLock = new ReentrantLock(); private volatile boolean writeLocked = false; private void lock() { writeLock.lock();
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优化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存