标签: greendao

Green DAO vs ORM lite vs Active Android

哪个是适用于Android的最佳ORM工具?

我看到ORMlite和ActiveAndroid是最受讨论的,我的一个朋友建议我使用GreenDAO.那么寻找一些可以帮助我做决策的知识资源?

我希望判断的功能是免费提供(开源),良好的文档,活动论坛,稳定版本等,这是开发人员所需要的.

android ormlite activeandroid greendao droidparts

60
推荐指数
3
解决办法
3万
查看次数

GreenDAO架构更新和数据迁移?

我正在评估GreenDAO在我将要开发的商业Android应用程序中的考虑,并希望确定架构更新的迁移路径.

我是否正确断言我必须编写一个自定义OpenHelper,它提供onUpdate()并根据新模式提取变换并存储数据?这个假设提出了一些有关呼叫排序和责任划分的有趣问题.

我无法找到有关GreenDAO的架构更新和数据迁移的任何文档.

以下是我就此主题撰写的一系列博客文章:

  1. 审查greenDAO
  2. 第1部分 - 模式生成
  3. 第2部分 - 模式迁移
  4. 第3部分 - 测试模式迁移

android greendao

58
推荐指数
5
解决办法
3万
查看次数

GreenDao Android Studio

我正在寻找有关如何在Android Studio中导入GreenDao的明确分步说明.

我之前在AS中使用过它,但未能再次使用它.有一些教程,但它们似乎不适用于最新版本的AS.

当我从github克隆时,我得到一个示例项目的东西等.有没有办法安装GreenDaoGenerator没有这些额外的东西?

只是寻找最新的逐步解释.

更新:我建议现在使用Realm.io!看看这个!:-)

任何帮助,将不胜感激!

android greendao android-studio

34
推荐指数
1
解决办法
2万
查看次数

ORM性能:greenDAO比ORMLite快吗?

我一直在我的应用程序中使用ORMLite,我正在考虑是否转向greenDAO.

性能是该决定的重要组成部分,greenDAO的功能页面说:

对于相同的给定实体,greenDAO插入和更新实体的速度提高了2倍,并且加载实体的速度比ORMLite快4.5倍.
...
(图表和图表更新于10-23-2011)

我认为ORMLite的配置文件生成步骤应该在运行时不需要反射.

ORMLite changlog表明greenDAO基准测试是在配置文件功能发布后完成的,但是greenDAO功能页面没有明确说明是否为测试生成了静态配置文件.

4.26:9/26/2011(svn r1978)
*ANDROID:添加了字段配置实用程序,以避免带注释的Dao创建性能问题.

从那以后,也有ORMLite性能修复,例如

4.40:4/16/2012(svn r2516)
*ANDROID:创建DAO时出现大的性能错误修复.外部字段总是使用反射而不是表格配置.

谁能确认greenDAO和ORMLite之间是否仍有很大的性能差异?谢谢!

sqlite performance android ormlite greendao

31
推荐指数
1
解决办法
2万
查看次数

连接池无法授予与线程的连接

我正在使用GreenDAO在Android中进行数据库处理.当执行许多数据库更改(> 15.000)时,我收到此错误消息:

数据库'/ data/data/...'的连接池无法使用标志0x1授予与线程312(Thread-312)的连接30.000002秒.

一切都被困住了.为什么会发生这种错误?

sqlite android greendao

30
推荐指数
2
解决办法
2万
查看次数

greenDao架构升级

我见过另一个关于使用green dao进行模式升级/迁移的问题(这里)

在该答案中有许多链接可用于在进行模式升级时使用的良好模式 - 但是没有关于您实际对数据进行的操作的示例,以便正确地迁移它并且我无法找到任何内容.

在我的情况下,我的迁移非常简单 - 我不希望转换任何现有数据,我只需要在我的模式中添加一些新表,我怀疑这是一种相当常见的情况.

在不删除用户已保存的数据的情况下,将新表添加到架构的最简单方法是什么?非常感谢一个具体的例子.

如果greenDao提供了一个类似于DevOpenHelper的类,它将简单地添加先前不存在于模式中的新表/列而不先删除现有的tabes/data,这将是非常棒的.

orm android greendao

26
推荐指数
3
解决办法
2万
查看次数

仅使用Proguard:无法初始化DaoConfig => ArrayIndexOutOfBoundsException

我使用以下ProGuard规则:

-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { *; }
-keep class **$Properties

-keep class org.greenrobot.greendao.**
-keepclassmembers class org.greenrobot.greendao.** { *; }

# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**

# If you do not use RxJava:
-dontwarn rx.**

启动应用程序时,我收到以下崩溃日志:

java.lang.RuntimeException: Unable to create application my.app.package.MyApplication: org.greenrobot.greendao.DaoException: Could not init DAOConfig
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4569)
   at android.app.ActivityThread.access$1500(ActivityThread.java:148)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5272)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig
   at …

android greendao greendao-generator android-proguard

19
推荐指数
3
解决办法
1592
查看次数

是否有greenDAO线程安全最佳实践?

我正在使用greenDAO,到目前为止一切都很顺利.文档或网站(或任何地方:()似乎没有涉及的一件事是它如何处理线程安全.

我知道其他地方提到的基础知识,比如"使用单个dao会话"(Android + SQLite的一般做法),我非常了解Java内存模型.库内部甚至看起来是线程安全的,或者至少是用这种意图构建的.但我见过的一切都没有涵盖这个:

greenDAO默认缓存实体. 这对于完全单线程程序来说非常好 - 透明和大多数用途的大量性能提升.但是,如果我loadAll()然后修改其中一个元素,我将在我的应用程序中全局修改同一个对象.如果我在主线程上使用它(例如用于显示),并在后台线程上更新数据库(正确和正确),除非特别小心,否则会出现明显的线程问题.

greenDAO是否在"引擎盖下"做任何事情以防止常见的应用程序级线程问题?例如,修改UI线程中的缓存实体,同时将其保存在后台线程中(更好的希望它们不会交错!特别是在修改列表时!)?是否有任何"最佳实践"来防范它们,超出了一般的线程安全问题(即greenDAO期望和适用的东西)?或者从多线程应用程序的安全角度看整个缓存是否存在致命缺陷?

multithreading thread-safety greendao

18
推荐指数
1
解决办法
2774
查看次数

greenDAO 40秒插入600条记录

我选择了greenDAO,因为它的网站声称它是Android上最快的ORM系统之一.对于我的失望,它需要40秒才能在三星i9001上插入600条记录.我不确定我做错了什么.

你能建议什么来减少执行这些操作所需的时间吗?

发生器代码:

private static void addNewsArticle(Schema schema) {
    Entity article = schema.addEntity("NewsArticle");
    article.addIdProperty().autoincrement();
    article.addStringProperty("title").notNull();
    article.addStringProperty("body").notNull();
    article.addStringProperty("shortDescription").notNull();
    article.addStringProperty("thumb");
    article.addDateProperty("date").notNull();
}
Run Code Online (Sandbox Code Playgroud)

插入

Date now = Calendar.getInstance().getTime();
for (int i = 0; i < 600; i++) {
    NewsArticle testArticle = new NewsArticle();
    testArticle.setTitle("title-text" + i);
    testArticle.setBody("body-text" + i);
    testArticle.setShortDescription("short-text" + i);
    testArticle.setDate(now);
    newsArticleDao.insert(testArticle);
}
Run Code Online (Sandbox Code Playgroud)

android greendao

14
推荐指数
2
解决办法
7031
查看次数

如何清理/删除greenDao数据库

目前我这样做:

DaoMaster.dropAllTables(getDb(), true);
DaoMaster.createAllTables(getDb(), true);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将实体添加到数据库时,我收到崩溃日志,说这个表不存在

Edit1:我知道发生这种情况是因为数据库被锁定而且还没有创建表.所以我正在解决这个问题 - 如何知道这些表是否被锁定在grrenDao/Sqlite中?

sqlite android greendao

13
推荐指数
2
解决办法
1万
查看次数