数据库GreenDAO+ORM


  • 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)使用场景不同,至于性能当然是推荐使用ORM

  • 7.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/43612947

  • 10.复制数据库

以上三部曲为传统方式,现在使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值