产品级别的可能错误 你的顾虑 出问题的的情形: 字段添加,导致旧表格字段与新的不匹配引发 android.database.sqlite.SQLiteException 类异常。...服务端数据返回无法与就表格匹配,无法进行插入操作 第一个情况会直接导致 APP 闪退掉,第二种就是数据不匹配。...greenDao 数据库升级,不会造成旧表的数据丢失 拓展了最终的成功和失败的回调 添加了错误日志的处理 解决了字段名称的冲突 bug,例如 delete 之类 MyGreenDaoDbHelper.java...详情可以去看看 issue 你的顾虑 如果我的表太多了,升级会不会造成 ANR 或者导致读写混乱? 是否实践过?...1, 答: sqlLite 的源码里面调用 onUpdrade方法的入口皆加上了同步琐,这样不会造成在升级中还能让你去读写的情况。 这点设计得非常优秀!表太多的,几百张?那么就放入子线程升级。
【SQL数据库使用中问题解决】——在sql使用过程中,发现数据类型无法更改 博主:命运之光 专栏:MySQL 分享一篇今天在数据库上机时遇到的小问题,问题和解决方案都在下方 问题描述 在sql...使用过程中,发现数据类型无法更改 解决方法(两步) 以下为解决方式: 第一步 第二步 结语 解决成功,祝各位好运(●’◡’●)
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。...而今天的主角便是 greenDAO,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结合代码总结一些使用过程中的心得。 关于 greenDAO ?...简单的讲,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。...「GreenDao Generator」的输出,你可以在这个类中通过对象、关系等创建数据库结构,下面我将以注释的形式详细讲解代码内容。...// 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。
GreenDao 3.0简介: 在Android开发中,数据缓存的开发可能会使用到SQLite,然而在使用它的时候,我们往往要进行许多额外的工作,编写原生的SQL语句与解析查询结果等。...gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名 targetGenDir:这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是...build中,这样就不用额外的设置资源目录了 3) 新建实体类 以下为基础属性注解 @Id :主键 long/Long型,可以通过@Id(autoincrement = true)...设置自增长 @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”) @NotNul:设置数据库表当前列不能为空...,id是我们数据库表的主键,上面代码中我给id使用自增长的注解,如果这里不设置的话,我们就需要在创建User对象的时候给id赋值,如果不这样做,就会报出空指针的异常。
首先是greendao的配置 GreenDao配置 在工程的build.grdle中,如下: buildscript { repositories { google()...:3.2.1' } } apply plugin: 'org.greenrobot.greendao' greendao { schemaVersion 1//数据库版本号...按照我上面的是可以的。 GreenDao的基本配置就已经完成了,下面我们编写一个实体类。...当前实体属于哪个schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法 nameInDb:在数据库中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列...在实体类中这样用: DBManager.getInstance(getApplicationContext()).insertUser(blackInfoCallMIssedBean); 其他的语句类似
1.2 在module下build.gradle(这里是app下的build.gradle)中添加下列代码: compile 'org.greenrobot:greendao:3.2.2' 并且在最上面添加...apply plugin: 'org.greenrobot.greendao' //新加的 1.3 在module下build.gradle android中配置greendao的信息 greendao...{ schemaVersion 1 //数据库版本号 daoPackage 'hlq.com.greendao.db'// 设置DaoMaster、DaoSession、Dao 包名...targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 基本上都是这个 } 我的目录如下: ?...@Entity 表明这个实体类会在数据库中生成一个与之相对应的表 @Id 对应数据表中的 Id 字段 其他更多注解可以参考greendao官方网站:http://greenrobot.org/greendao
sqlite数据库,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写。...在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译sqlite可以修改超时时间),就报”database is locked”错误。...SQLiteException: database is locked异常的解决 - 简书 如何处理 1 默认 5 秒是很长的时间了,找出具体是哪些业务执行会造成超时 5 秒 beets: the SQLite...时间 这个只能是减少问题发生的概率,具体方法如下: 设置 busy timeout 的 API sqlite 原始 API Set A Busy Timeout devart 库的 API BusyTimeout...我一开始用的调用方加锁的方式,性能不太好。 我最终的解决方案是把不同线程所有需要写入的数据都统一插入到一个线程安全的集合里, 然后开个线程专门用来将集合数据写入sqlite。
有时我们的数据属于保存到数据库,对于Android应用和IOS应用,我们一般都会使用SQLite这个嵌入式的数据库作为我们保存数据的工具。...由于我们直接操作数据库比较麻烦,而且管理起来也非常的麻烦,以前用ormlite,最近项目尝试用greendao来保存数据。 ?...使用gradle导入greendao包和greendao-generator包并配置我们的路径 其中greendao用于我们操作数据库的类。...而greendao-generator是用来产生我们的的数据库的数据类。包含了Bean、DAO、DaoMaster、DaoSession 。...我们在项目配置文件中添加如下代码: compile 'org.greenrobot:greendao:3.0.1' compile 'org.greenrobot:greendao-generator:
前言 之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的差异。...只停留在会使用的阶段。说起来也是惭愧。本文的重点也是在于如何快速使用。不会进行较深的探究。 ---- GreenDAO: 介绍:对象关系映射的数据库(ORM) ?...GreenDAO 官网地址 优点 性能高,号称Android最快的关系型数据库 内存占用小 库文件小,编译时间短 支持数据库加密 API简介易用 说了他的优点,那么我们来看下如何使用。...在App中的build.gradle添加如下: apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao...(nameInDb="name") @NotNul:设置数据库表当前列不能为空 @Transient :添加次标记之后不会生成数据库表的列 索引注解 @Index:使用@Index作为一个属性来创建一个索引
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的。直接面向对象的,可以通过对对象的操作,实现数据的存储。...createInDb:标记创建数据库表 基础属性注解 @Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长 @Property:设置一个非默认关系映射所对应的列名...(没有在app的gradle里面设置targetGenDir 路径的,默认生成目录如下图) ? 第三步:在application中需要初始化数据库相关操作的对象 ?...19 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。...下次会为大家介绍通过使用greenDao来实现数据库的增删改查等操作。
但是在使用过程中感觉很繁琐,从建表到对表的增删改查等操作,如果表对象的属性很多,就需要使用大量的代码来执行建表、插入等。...在代码执行中还需要对数据库和游标的进行及时关闭(开启使用,用完关闭),而且还需要部分sql语言,这在开发中产生bug进行调试时尤其不方便。...因此决定采用greenDAO框架,对项目的orm框架进行改进。 greenDAO与ORMLite性能对比 经过两天的修改,终于将项目里的数据库相关的都优化完了。...或者官网) greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新...例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的数据库名称是大写使用下划线分隔单词,而不是在Java中使用的驼峰式大小写风格。
这四个核心类的功能体系如下图所示: DaoMaster GreenDao框架管理类,该类对数据库相关管理操作进行封装 我们知道在使用GreenDAO时候,我们的入口点就是通过DaoMaster...DevOpenHelper类中实现了onUpgrade()方法,就是更新数据库的方法,它在更新数据表的时候会把以前的数据表删除后再重新创建,所以这个你必须注意,当我们在利用GreenDAO更新数据表的时候...我们回到DaoMaster的源码中,发现在DaoMaster类的构造方法中调用了,并且传入了Student.class,所以我们在创建DaoMaster对象的时候也同时为EntityDao类和相应的数据库...DaoSession对象是连接GreenDao框架到SQLite数据库的纽带,通过该对象我们可以得到一个与数据库某个表相关的操作对象xxxDao。...原因是GreenDao在查询这块加了缓存,有趣吧,GreenDao在查询时使用了弱引用WeakReference,假如第一次查询时候我查询了小明这个Student的数据,那么它将把小明加入一个SparseArray
的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例: 场景重现 //第一次查询 List chats = daoSession.getChatSessionDao...() .queryBuilder() .orderDesc(ChatSessionDao.Properties.Updatetime) .list(); //对数据库中的一条数据进行更新...的值是一样的,使用工具查看Sqlite数据库,发现body的值已经变化了,也就是说,我们第二次查询并没有真正执行,返回的是第一次查询的结果。...如果要解决缓存问题,这里就要用到DaoSession的一个方法: DaoSession.clear(); 在示例代码中应该写在第二次查询前面 daoSession.clear(); //第二次查询 .....GreenDao配置与使用 GreenDao详细的配置和Demo可以参考: ORM 框架之 greenDAO 使用心得 GreenDao PS: 你可以关注的我Github、CSDN和微博
前段时间写Demo的时候遇到了数据库的并发问题 Android数据库多线程并发操作异常 ,然后研究了一下 Android中的数据库连接池 。...这里主要分析、对比一下GreenDao框架 在原生的基础之上进行了怎么样的封装。 在进行源码分析之前我们先说一下GreenDao 的优缺点,然后在下面的阅读过程中自己进行体会。...数据库表有关系时,在第一次请求上会有延迟并且之后的更新都不会自动同步,需要主动更新或者清楚缓存之后再请求,写的时候需要主动同时更新。...数据库框架设计 文章前面简单的用代码进行数据库操作,我们可以从中看到一般在Android中操作数据库所需要的对象有: SQLiteOpenHelper:数据库的创建、更新的操作对象; SQLiteDatabase...green-session.png GreenDao的优化 GreenDao 的优化主要体现在 DaoConfig 这个类中。
在使用 dotnet 读写 Sqlite 可以通过 EF Core 的方法,但是在 EF Core 创建的数据库可能和读写的数据库不是相同的文件 在我运行代码的时候发现在通过迁移创建数据库,创建的文件是在项目的代码文件夹里面...,但是在运行代码的时候是从程序的文件夹开始寻找,于是就找不到数据库文件 因为找不到数据库文件就会提示 Microsoft.Data.Sqlite.SqliteException:“SQLite Error...1: 'no such table:Foo'" 看起来和没有写迁移一样 在 dotnet 使用迁移就可以创建数据库,或者在修改数据 dotnet ef migrations add Lindexi dotnet...\数据库.db 就可以找到数据库 如果是在 ASP.NET Core 可以使用下面代码 public class Startup { private IApplicationEnvironment...如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页 本作品采用 知识共享署名-非商业性使用-相同方式共享
举几个例子说明: ★ 客户端的http请求操作,可以实现的方案有Retrofix、OkHttp、Volley等; ★ 客户端的数据库存储方案可以为Realm、greenDao、OrmLite等;...又比方说,目前正在用的数据存储方案是OrmLite,现在使用greenDao或者Realm会更好,在类似这些情况下,如何做到不修改Activity/Fragment/Presenter代码的情况下,把Volley...这些方法,数据库存储框架中无论是Realm/greenDao/OrmLite,它们要实现的都是增删改查这些方法。 ...); Step5:不更改MainActivity中任何代码,把Http请求的逻辑替换成OkHttp来实现 1)先用OkHttp来实现IRequestManager这个接口. ? ...我在原作者的基础上加了另一种和实现方式,这是github地址 可以去下载看看 我写的 网络请求隔离框架github下载地址 ---- 引用原文网址:对于有多种可替代解决方案的业务逻辑,提供一种快速更换的思路
序列化数据库中存储起来,在下一次进入应用的时候加载数据库还原出账号。...greenDAO greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案,以下是一个greenDAO的作用示意图: ?...这里我们也使用了 greenDAO 来把ETHWallet对象映射到 SQLite 数据库, greenDAO的用法这里只简单说明,不详细阐述,大家可以跟随官方提供的introduction[7] 和...在使用ETHWalletDao插入到数据库之前需要先进行一个初始化,通常初始化放在应用程序入口中进行,如:pro.upchain.wallet.UpChainWalletApp的onCreate()中执行...return currentWallet; } 打通账号创建与保存 以通过私钥导入账号进行保存为例,把创建账号和保存账号打通,这里我们使用响应式编程 ReactiveX, 这部分作为订阅者福利,发表在我的小专栏
由于buildSrc是对全局的所有module的配置,所以可以在所有module中直接使用 Gradle模块化 我们在开发中,引入一些插件时,有时需要在build.gradle中引入一些配置,比如greendao...,推送,tinker等 这些其实是可以封装在相应gradle文件中,然后通过apply from引入 举个例子,例如在我们使用greendao数据库时,需要在build.gradle中指定版本 这种时候应该新建一个...greendao-config.gradle apply plugin: 'org.greenrobot.greendao' //greenDao指定版本和路劲等 greendao { //数据库的...schema版本,也可以理解为数据库版本号 schemaVersion 1 //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。.../main/java' } 然后再在build.gradle中引入 apply from 'greendao-config.gradle' 这样做主要有2个优点 单一职责原则,将greendao的相关配置封装在一个文件里
这两个框架思想都差不多,都是把面向对象映射成关系型语言, 主要区别有以下几个: 1. greenDAO的version等数据库属性设置都是在对应的模型类里面完成的,以Java class的属性变量的形式存储...;而LitePal是在另外的一个xml文件中定义。...而LitePal是直接将Java模型类映射成SQLite数据库对象; 3.添加关系数据表的属性时,greenDAO通过生成的Java实体类的实例调用对应数据类型的方法进行属性添加: ?...图片发自简书App 而LitePal是在开发者自行写的模型类中通过定义Java class的属性变量的形式添加: ?...在使用的时候可以根据具体的操作环境或者个人的编程风格习惯进行抉择。
错误提示: android.database.sqlite.SQLiteException: table tb_diary2 has no column named recordPath (code 1...): , while compiling: insert into tb_diary2 出现背景: 更新了某个表,插入或删除某个列: 如图: 我在原来的tb_diary2中增添了一个字段recordPath...,对应的实体、Dao类也做了修改,结果在添加时程序报上面那个错。...解决办法: 修改数据库名称。比如说把上图中原来的数据库 name = “diary2.db”改为”diary3.db”。...修改表后插入报错,可能sqlite没有更新该数据库下的表,只好修改数据库名称,新建一个。
领取专属 10元无门槛券
手把手带您无忧上云