android代码打开数据库,Android打开和关闭数据库

与计算机编程中的许多事情一样,关闭SQLite数据库的时间没有单一的“正确进行”(如果您正在使用它,则通过SQLiteOpenHelper上的close(),否则对SQLiteDatabase执行close()).

一个相当硬的规则是不要同时跨多个线程为同一个数据库使用多个SQLiteDatabase对象.这可能会让你遇到麻烦,除非你正在进行自己的线程同步.如果您坚持每个数据库使用一个SQLiteDatabase对象,则在SQLiteDatabase中处理线程同步.

由于one-database-for-all-threads规则,并且因为在许多不同的组件中跟踪何时线程可能或可能不想要数据库可能会很棘手,一些开发人员采用单一数据库管理器的方法,懒惰打开数据库……永远不会关闭它.例如,数据库支持的ContentProvider使用此模式,因为ContentProvider永远不会被销毁,因此没有明确的时间关闭数据库.

就个人而言,我会通过开放式使用 – 关闭方法走这条路线,特别是如果你使用SQLCipher for Android(加密的SQLite替代品).但是,如果您确定一次只有一个线程可以使用数据库,那么open-use-close方法没有什么特别的错误.

如果只有一个组件使用数据库,则触发在onCreate()中打开数据库并在onDestroy()中关闭它没有任何问题.毕竟,如果这是唯一需要数据库的组件,那么当组件本身消失时,您不需要数据库.

Close your db in onDestroy() Comments: “OnDestroy() does not get called always! Use onStop()!” –> So onStart() has to open it.

如果未在组件上调用onDestroy(),则表明您在该组件中遇到未处理的异常,或者您的进程已终止.后一种情况不是问题(同样,这是ContentProvider的工作方式,因为提供程序永远不会被销毁).前一种情况应该不是问题,只要您不会在多个线程中意外地同时使用旧的SQLiteDatabase和一些较新的SQLiteDatabase.

The db works efficiently. No need to close it.

这不是效率问题. SQLite是事务性的.无法关闭数据库不是问题,因为没有未刷新的缓冲区或您必须担心的事情.

Open your db once and create a field and an accessor.

这与关闭数据库时没有任何关系.

Close after use.

这是一种模式,并且正确完成它可以工作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一.创建一个DataBaseHelper DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDataBase对象的时候onCreate 二、创建一个实体person类并且给字段和封装 三、创建一个业务类对SQL的CRUD操作 1.getWritableDatabase()和getReadableDatabase()的区别 ,两个方法都可以获取一个用于操作数据库的SQLiteDatabase实例 2.execSQL(增,删,改都是这个方法)和close();android内部有缓存可关闭也不关闭也行,查询rawQuery是方法 3.在分页有到Cursor(游标)取游标下一个值cursor.moveToNext(),用游标对象接数据 "select * from person limit ?,?" person不能加上where 关键字 4.在删除注意:sb.deleteCharAt(sb.length() - 1); 四、AndroidCRUD业务对SQLite的CRUD操作 1.ContentValues对象的使用 2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般设置为局部对象 */ 六、AndroidManifest.xml的配置 <!-- 配置用户类库android.test.runner测试 --> package jll.sqlitedb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 * 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 */ public class DataBaseHelper extends SQLiteOpenHelper { // 给一个默认的SQLite的数据库名 private static final String DataBaseName = "SQLite_DB"; private static final int VERSION = 2; // 在SQLiteOpenHelper的子类当中,必须要有的构造函数 public DataBaseHelper(Context context, String name, CursorFacto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值