`
xjm236
  • 浏览: 515 次
文章分类
社区版块
存档分类
最新评论

极速开发框架dhroid之sqlite优化

 
阅读更多
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(Objectsrc,TypetypeOfSrc)获得json数据插入数据库,读取使用Gson.fromJson(Stringjson,TypetypeOfT)获得相应对象,具体看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下载

分享到:
评论

相关推荐

    Android应用源码之Android 极速开发框架 dhroid.zip

    《Android 极速开发框架 ...总之,《Android 极速开发框架 dhroid》是一个全面的开发工具包,它通过各种优化手段和便捷功能,大大提升了Android应用的开发效率,降低了开发难度,是Android开发者值得尝试的优秀框架。

    Android 极速开发框架 dhroid.zip

    【Android 极速开发框架 dhroid.zip】是一个远古时期的Android开发框架,它可能包含了针对Android应用快速开发的一系列工具、库和最佳实践。在早期的Android开发中,这样的框架通常是为了提高开发效率,减少重复工作...

    Android 极速开发框架 dhroid.zip源码资源下载

    【Android 极速开发框架 dhroid.zip源码资源下载】是一个专为Android应用开发者设计的高效、便捷的开发框架,旨在提高开发效率并简化代码管理。这个框架集成了多个核心组件,包括网络通信、数据存储、UI交互以及任务...

    安卓开发-Android 极速开发框架 dhroid.zip.zip

    【Android 极速开发框架 dhroid.zip】是一个专为安卓开发者设计的高效开发框架,旨在加速应用程序的构建过程,提高开发效率。这个框架包含了多个关键组件和库,可以帮助开发者快速实现常见功能,如网络请求、数据...

    Android应用源码之Android 极速开发框架 dhroid-IT计算机-毕业设计.zip

    【Android 极速开发框架 dhroid】是一款专为Android开发者设计的高效开发工具,它集成了许多实用功能,旨在简化Android应用的开发流程,提高开发效率。本框架的设计与实现,是基于Android平台的深入理解和实践经验,...

    安卓开发框架工具类相关-开发框架dhroid源码.rar

    【安卓开发框架工具类相关-开发框架dhroid源码】 Android开发框架是构建高效、可扩展且易于维护的Android应用的基础。"dhroid"源码提供了开发者一个学习和参考的平台,它包含了丰富的工具类,旨在简化常见的开发...

    WPF基于Stylet框架的sqlite增删改成程序

    本项目是一个使用WPF(Windows Presentation Foundation)技术构建的应用程序,它结合了Stylet框架和SQLite数据库,实现了对SQLite数据库的增删改查功能。以下将详细阐述项目中的核心知识点: 1. **WPF(Windows ...

    Android SQLite ORM框架

    一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...

    SQLite3的性能优化

    SQLite3 的性能优化 SQLite3 是一个轻量级的关系数据库管理系统,常用于嵌入式系统中。在嵌入式系统中,数据库的性能优化尤为重要。本文将主要讲述在嵌入式中使用 SQLite3 时,对相关的数据库的性能如何优化的问题...

    SqliteORM,一个很好的Sqlite ORM框架

    Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...

    sqlite3的ORM框架

    SQLite3的ORM(Object-Relational Mapping)框架是一种在C++编程中将数据库关系模型与对象模型进行对应的技术。ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码...

    Android开发环境中的SQLite性能优化.pdf

    "Android开发环境中的SQLite性能优化" 在 Android 开发环境中,SQLite 是一个非常流行的嵌入式数据库管理系统。为了提高 SQLite 的性能和资源占用,我们可以通过两种方法进行优化:使用事务和使用索引。 首先,让...

    C# SQLite执行效率的优化教程

    C# SQLite执行效率优化教程 本文主要介绍了关于C# SQLite执行效率优化的相关资料,通过示例代码介绍的非常详细,对大家学习或者使用C# SQLite具有一定的参考学习价值。 一、SQLite简介 SQLite是一款轻型的嵌入式...

    小工具框架,electron+sqlite

    "小工具框架,electron+sqlite" 是一个基于 Electron 和 SQLite 的应用程序开发框架,它结合了桌面应用的强大功能和数据库管理的便利性。Electron 是一个用于构建跨平台桌面应用程序的开源框架,它允许开发者使用 ...

    基于Qt框架和SQLite数据库开发的学生信息管理系统源码+项目说明(可作课设).zip

    基于Qt框架和SQLite数据库开发的学生信息管理系统源码+项目说明(可作课设).zip基于Qt框架和SQLite数据库开发的学生信息管理系统源码+项目说明(可作课设).zip基于Qt框架和SQLite数据库开发的学生信息管理系统源码+...

    sqlite 优化资料

    本资料主要关注在Windows环境下SQLite的安装、使用以及性能优化,下面将详细阐述相关知识点。 一、SQLite的安装与配置 在Windows操作系统上,SQLite通常是通过API库或者预编译的动态链接库(DLL)进行集成。你可以...

    SQLite3性能优化

    SQLite3是一款轻量级的数据库引擎,广泛应用于嵌入式设备和移动应用中。..."sqlite-amalgamation-3071300.zip"则包含了SQLite3的源代码和编译脚本,对于深入了解其内部机制和进行定制优化非常有用。

    Android SQLite数据库框架greenDAO 源码

    greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。

Global site tag (gtag.js) - Google Analytics