- 1.简介:
- 1)greenDAO是一个可以帮助 Android 开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。
- 1)greenDAO是一个可以帮助 Android 开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。
2.具体使用方法
- 1)http://blog.youkuaiyun.com/tyyj90/article/details/50450901
- 2)http://www.openopen.com/lib/view/open1438065400878.html 图解
- 3)http://blog.youkuaiyun.com/u010687392/article/details/48444417
官方文档翻译:
http://blog.youkuaiyun.com/xushuaic/article/details/24438841
http://blog.youkuaiyun.com/xushuaic/article/details/24496191
http://blog.sina.com.cn/s/blog_af5cfb030102w20v.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1127/2069.html
http://www.jianshu.com/p/c4e9288d2ce6
3.加密:SQLCipher
4.更多:
4.1.描绘了元模型
4.2.Schema模式类
通常用法:
http://greenrobot.org/greendao/documentation//modelling-entities/
两种构造方法:
1)其一:传入版本号和默认生成各种java文件的路径名
2)其二:对于测试类可以分开创建
文档中的对实体类的两个标识设置量
路径+包名拼接而成-完美构造
5.注意:
- 5.1.框架和封装其实也是解决一类问题:框架和封装相较于它们所解决的问题,有时候能带来更多麻烦。例如,在一个项目中,我们同时写入数据库且实例化很多对象,这就会导致我们的 ORM 库慢得像爬一样。因为这个库不是设计用来让我们以这样的方式使用的。有时候确实不能过分依赖框架和封装。
- 5.2.视图以及任何数据库模式(schema)中的东西。你可以重写例如 onConfigure() 之类的其他方法来启用或禁用数据库功能,比如预写日志或外键支持等。
- 5.3.SQLiteOpenHelper 使用数据库的版本号来决定是否需要升级或降级。在升级或降级的回调方法中,你将使用提供给你的oldVersion 和 newVersion 参数来决定哪个 ALTER 语句需要执行来更新 schema。为每个新数据库版本提供单独的语句是一种很好的方法,这样就可以处理数据库的跨版本升级了
【添加数据库真是一个复杂的工作,一步一步来吧!先要在项目中有一个引子,有一个尝试,不行注释掉也是好的】 - 5.4.数据库创建和模式改变是在你第一次获得 SQLiteDatabase 实例后才会进行的。因此,你不能在主线程请求 SQLiteDatabase 实例。你的 SQLiteOpenHelper 子类几乎都会返回同样的 SQLiteDatabase 实例。这意味着在任何线程调用SQLiteDatabase.close() 都会关闭你应用中所有的 SQLiteDatabase 实例。这就导致一大堆难于查找的 bug。实际上,有些开发者选择只在程序启动时打开 SQLiteDatabase ,只在程序关闭调用 close()。【数据库的关闭和打开】
- 5.5.数据访问对象 (Data Access Object):Android 不提供任何列集和散集对象的方法。这意味着我们要负责管理从 Cursor 中取数据到 POJO 中的逻辑。这套逻辑应该用 Data Access Object (DAO) 封装好。
- 5.6.它的主要目的是将应用的交互从持久化层中抽象出来,而不暴露持久化的实现细节。这可以把应用从数据模式中隔离出来。这也使得迁移到第三方的数据库实现时,对应用的核心逻辑造成的风险能更小。你的应用中的所有与数据库的交互都应该通过 DAO 实现。
- 5.7.SQLiteDatabase 提供了对数据库进行查询,插入,更新及删除的方法。对于简单的查询,你不用写任何 SQL。但对于更高级的查询,你还要得自己写 SQL。SQLiteDatabase 有一个 rawQuery() 和 execSQL() 方法, 这能把整个 SQL 当做参数来执行高级查询,例如使用 unions 和 joins 命令。你可以使用 SQLiteQueryBuilder 来协助你完成适当的查询。
- 5.8. query() 和 rawQuery() 都返回 Cursor 对象。保持 Cursor 对象的引用并且在应用中传来传去听起来十分诱人,但是 Cursor 对象比 单纯的 Java 对象 (Plain Old Java Object, POJO) 耗费更多的系统资源。因此,Cursor 对象需要尽快散集化到 POJO。在散集化之后你需要调用 close() 方法释放资源。
- 5.9. SQLite 中支持事务 (transactions)。你可以通过调用 SQLiteDatabase.beginTransaction() 开启一个事务。事务能通过调用beginTransaction() 嵌套。当外层事务结束后所有在这个事务中完成的工作,以及所有嵌套的事务都需要提交或回滚。所有那些没有用 setTransactionSuccessful() 方法标记为完成的事务中的变更都会被回滚
- 5.10.异步加载数据:获取 SQLiteDatabase 的参照是一个昂贵的操作,因此永远不要在主线程执行它。扩展来说,数据库查询也不要在主线程执行。Android 提供 Loaders 来帮助实现这一点。它们允许 activity 或 fragment 异步加载数据。Loaders 可以解决配置改变时数据持久的问题,也能检测数据并在内容改变的时候发送新的结果。Android 提供 CursorLoader 来从数据库中加载数据。
- 5.11.与其他应用程序共享数据:虽然数据库对于创建它们的应用来说是私有的,但是 Android 也提供与其他应用程序共享数据的方法。Content Providers 提供一个结构化的接口,能使其他应用读取甚至可能修改你的数据。和 SQLiteDatabase 类似, Content Providers 开放出query(),insert(),update() 和 delete() 这些方法来操作数据。数据以 Cursor 的形式返回,而且对 Content Provider 的访问默认是同步的,这样可以使访问是线程安全的。
http://yingzixia.com/forum.php?mod=viewthread&tid=266
6.Android ORM VS ContentProvider
1)使用场景不同,至于性能当然是推荐使用ORM7.ORM简介
- 1)对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
- 2)对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM就是这样而来的。
8.最终选择ORM框架
1)GreenDAO 性能好,速度快
9.如果一定要使用传统方式SQLite,则配合
https://github.com/LitePalFramework/LitePal#latest-downloads
http://blog.youkuaiyun.com/su19921021/article/details/39964333
和
https://github.com/chenyihan/Simple-SQLite-ORM-Android
http://blog.youkuaiyun.com/pentiumchen/article/details/4361294710.复制数据库
1.应用场景
1.1.做android开发时,有时并不一定要创建数据库然后插入数据的过程。譬如,需要提供一个大数据量资源的搜索功能。像号码归属地,城市列表,ip归属地等。此时如果键数据库,再将数据一条一条insert到数据库中,不仅耗时,占用资源,有时还会导入错误。最好的方法是将数据库建好,数据insert好,并将该.db文件放在raw(如果没有,在res目录下建一个)目录下。在创建数据库时,直接将该文件拷贝到databases目录下:
1.2.我们把db文件放到raw/assert目录下面,在程序第一次启动的时候复制到私有目录下面2.参考文档:
2.1.Android导入已有的SQLite数据库
http://blog.youkuaiyun.com/li641808825/article/details/47753153
2.2.利用sql语句
http://blog.youkuaiyun.com/howie_w/article/details/12868345
2.3.复制数据库
http://blog.youkuaiyun.com/madun/article/details/6888356
http://blog.youkuaiyun.com/w1857518575/article/details/15812087
更好的方案:
http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application/9109728#91097283.逻辑:
因为Android系统下的数据库是存放在/data/data/(package name)/databases/的目录下,所以我们可以这样:
3.1.将.db文件放到项目源码的res/raw目录下;
3.2.用FileInputStream读取原数据;
3.3.用FileOutPutStream把读取到的数据写入那个目录
以上三部曲为传统方式,现在使用GreenDao辅助框架来实现
How to create database from Assets in Android using GreenDao ORM library
GreenDao use existing database instead of creating one
还是使用失败了:我是希望不仅要复制,还要建立关联,看来是zanshuju
http://stackoverflow.com/questions/9630288/how-to-create-database-from-assets-in-android-using-greendao-orm-library