Android sqlite 操作最佳实践及其注意事项
来源:互联网 发布:淘宝全民晒单推广 编辑:程序博客网 时间:2024/06/08 08:59
1、同一个Helper每次调用getWriteableDataBase实质上是返回的同一个DataBase,若在多次调用getWriteXXXX 不会报错,而是直接返回了之前已经打开的database,如果检测到DataBase已经被关闭了,则新打开一个DataBase并返回。
2、要支持多个线程同时去操作数据库,必须要用到同一个连接。
例如有2个helper都会去getDataBase,他们得到的连接是2个不同的对象。
// Thread 1
SQLiteDatabase database = getWriteDatabaseXXX()
database.insert(…); // CRUD操作
SQLiteDatabase database = getWriteDatabaseXXX()
database.insert(…); // CRUD操作
database.close();//关闭
// Thread 2
SQLiteDatabase database = getWriteDatabaseXXX()
database.delete(…); // CRUD操作
database.delete(…); // CRUD操作
database.close();//关闭
结果: 某个线程会操作失败,并报异常:android.database.sqlite.SQLiteDatabaseLockedException: database is locked
原因: 是我们使用了不同的数据库连接。
3、在异步的环境下,用同一个连接也会产生问题, 比如2个线程都在去操作数据库。
SQLiteDatabase singelDataBase ; // 唯一的
// Thread 1
SQLiteDatabase database = singelDataBase ;
database.insert(…); // CRUD操作
SQLiteDatabase database = singelDataBase ;
database.insert(…); // CRUD操作
database.close();//关闭
// Thread 2
SQLiteDatabase database = singelDataBase ;
database.delete(…); // CRUD操作
database.delete(…); // CRUD操作
database.close();//关闭
第一个线程执行完毕后,就会关掉连接,第二个再去执行的时候,就会报 attempt to re-open an already-closed object: SQLiteDatabas,
解决办法:
1、一直不关闭这个连接,直到App destory的时候,才去关闭连接。但是这样会 Caused by: java.lang.IllegalStateException: SQLiteDa tabase created and never closed 一直会出现此警告,肯定不值得推荐。同时如果该Helper一直没关闭连接(DataBase),当垃圾回收的时候,会报 Close() was never explicitly called on databse 错误。以下是垃圾回收代码截图
2、需要手动程序控制,当没有其他操作在使用这个连接的时候,才真正的去关闭该连接,利用(AtomicInteger)
0 0
- Android sqlite 操作最佳实践及其注意事项
- 关于SQLite,Android上SQLite的最佳实践
- SQLite 数据库的最佳实践
- SQLite 数据库的最佳实践
- HTTPS理论基础及其在Android中的最佳实践
- HTTPS理论基础及其在Android中的最佳实践
- 敏捷工具及其最佳实践
- SQLite数据库操作实践
- android sqlite使用注意事项
- Android最佳实践
- Android 最佳实践
- Android最佳实践
- Android 涂鸦最佳实践
- Android 最佳实践
- Android开发最佳实践
- Android开发最佳实践
- Android开发最佳实践
- Android 开发最佳实践
- 新人要学的HTML实用颜色代码大全
- 曝李小冉鄢颇分手2个月 男方曾被女方旧爱砍伤
- PHP 文档学习 - 3 - 流程控制
- Android使用gson解析json
- 博客已搬家
- Android sqlite 操作最佳实践及其注意事项
- 传统定时器技术回顾
- ORACLE 默认帐户
- 使用UIScreenEdgePanGestureRecognizer写iOS7侧边栏
- 带回我的身旁
- 线段树:Balanced Lineup(pku 3264)(解题报告)
- 忠于自己
- 牙痛
- 那么多期盼。你知道吗