- 浏览: 1066346 次
- 性别:
- 来自: 南昌
文章分类
- 全部博客 (276)
- 生活 (1)
- 代码之美 (22)
- Media (7)
- Android Widget (3)
- Android Intent (1)
- Android Activity (4)
- UI event handle--UI事件处理机制 (2)
- Java基础知识 (12)
- android Databases (5)
- Android 系统知识 (70)
- 平常遇到的问题与解决方法 (38)
- Android TextView/EditView (2)
- Thinking Java (1)
- android webkit (6)
- JSON (1)
- XML (4)
- HTTP (1)
- Google Weather API (1)
- android 2.3 NFC (10)
- android app (20)
- android framework (7)
- C++ (2)
- android System (5)
- Pthread (1)
- Wifi (8)
- Unix/Linux C (8)
- Android 4.0 (1)
- Mail (1)
- Smack 源码学习 (4)
- iOS (4)
- Android (1)
- git (1)
- Gallery3d (2)
- React-Natice (1)
最新评论
-
dd18349182956:
你是用的smack哪个版本?我用的smack4.1.3和sma ...
关于socket长连接的心跳包 -
xukaiyin:
全英文
getApplicationContext()与this,getBaseContext() -
裂风矢:
...
<category android:name="android.intent.category.DEFAULT" /> 惹的祸 -
xanthodont:
mark一下
XMPP——Smack -
Evilover3:
mark一下,学习了
XMPP——Smack
转:http://www.cnblogs.com/wuhenke/archive/2011/11/20/2256618.html
从3.7.0版本(对应iOS 4.3)开始,SQLite还提供了Write-Ahead Logging模式。与delete模式相比,WAL模式在大部分情况下更快,并发性更好,读和写之间互不阻塞;而其缺点对于iPhone这种嵌入式设备来说可以忽略,只需注意不要以只读方式打开WAL模式的数据库即可。
使用WAL模式时,改写操是附加(append)到WAL文件,而不改动数据库文件,因此数据库文件可以被同时读取。当执行checkpoint操作时,WAL文件的内容会被写回数据库文件。当WAL文件达到SQLITE_DEFAULT_WAL_AUTOCHECKPOINT(默认值是1000)页(默认大小是1KB)时,会自动使用当前COMMIT的线程来执行checkpoint操作。也可以关闭自动checkpoint,改为手动定期checkpoint。
为了避免读取的数据不一致,查询时也需要读取WAL文件,并记录一个结尾标记(end mark)。这样的代价就是读取会变得稍慢,但是写入会变快很多。要提高查询性能的话,可以减小WAL文件的大小,但写入性能也会降低。
需要注意的是,低版本的SQLite不能读取高版本的SQLite生成的WAL文件,但是数据库文件是通用的。这种情况在用户进行iOS降级时可能会出现,可以把模式改成delete,再改回WAL来修复。
要对一个数据库连接启用WAL模式,需要执行“PRAGMA journal_mode=WAL;”这条命令,它的默认值是“journal_mode=DELETE”。执行后会返回新的journal_mode字符串值,即成功时为"wal",失败时为之前的模式(例如"delete")。一旦启用WAL模式后,数据库会保持这个模式,这样下次打开数据库时仍然是WAL模式。
要停止自动checkpoint,可以使用wal_autocheckpoint指令或sqlite3_wal_checkpoint()函数。手动执行checkpoint可以使用wal_checkpoint指令或sqlite3_wal_checkpoint()函数。
http://www.sqlite.org/fileformat2.html#filesize
Database Header Format
Offset Size Description
0 16 The header string: "SQLite format 3\000"
16 2 The database page size in bytes. Must be a power of two between 512 and 32768 inclusive, or the value 1 representing a page size of 65536.
18 1 File format write version. 1 for legacy; 2 for WAL.
19 1 File format read version. 1 for legacy; 2 for WAL.
在我们的研究过程中,发现android 默认是将WAL模式关掉的,而在HTC HD 上开启的,这就产生了为什么从HTC HD拷贝出来的数据库到别的设备上会导致file is encrypted or is not a database
可以参考以下连接:
http://stackoverflow.com/questions/4718934/sqlite-issues-with-htc-desire-hd
http://stackoverflow.com/questions/6444170/sqlite3-wal-databaseerror-file-is-encrypted-or-is-not-a-database
从3.7.0版本(对应iOS 4.3)开始,SQLite还提供了Write-Ahead Logging模式。与delete模式相比,WAL模式在大部分情况下更快,并发性更好,读和写之间互不阻塞;而其缺点对于iPhone这种嵌入式设备来说可以忽略,只需注意不要以只读方式打开WAL模式的数据库即可。
使用WAL模式时,改写操是附加(append)到WAL文件,而不改动数据库文件,因此数据库文件可以被同时读取。当执行checkpoint操作时,WAL文件的内容会被写回数据库文件。当WAL文件达到SQLITE_DEFAULT_WAL_AUTOCHECKPOINT(默认值是1000)页(默认大小是1KB)时,会自动使用当前COMMIT的线程来执行checkpoint操作。也可以关闭自动checkpoint,改为手动定期checkpoint。
为了避免读取的数据不一致,查询时也需要读取WAL文件,并记录一个结尾标记(end mark)。这样的代价就是读取会变得稍慢,但是写入会变快很多。要提高查询性能的话,可以减小WAL文件的大小,但写入性能也会降低。
需要注意的是,低版本的SQLite不能读取高版本的SQLite生成的WAL文件,但是数据库文件是通用的。这种情况在用户进行iOS降级时可能会出现,可以把模式改成delete,再改回WAL来修复。
要对一个数据库连接启用WAL模式,需要执行“PRAGMA journal_mode=WAL;”这条命令,它的默认值是“journal_mode=DELETE”。执行后会返回新的journal_mode字符串值,即成功时为"wal",失败时为之前的模式(例如"delete")。一旦启用WAL模式后,数据库会保持这个模式,这样下次打开数据库时仍然是WAL模式。
要停止自动checkpoint,可以使用wal_autocheckpoint指令或sqlite3_wal_checkpoint()函数。手动执行checkpoint可以使用wal_checkpoint指令或sqlite3_wal_checkpoint()函数。
http://www.sqlite.org/fileformat2.html#filesize
Database Header Format
Offset Size Description
0 16 The header string: "SQLite format 3\000"
16 2 The database page size in bytes. Must be a power of two between 512 and 32768 inclusive, or the value 1 representing a page size of 65536.
18 1 File format write version. 1 for legacy; 2 for WAL.
19 1 File format read version. 1 for legacy; 2 for WAL.
在我们的研究过程中,发现android 默认是将WAL模式关掉的,而在HTC HD 上开启的,这就产生了为什么从HTC HD拷贝出来的数据库到别的设备上会导致file is encrypted or is not a database
可以参考以下连接:
http://stackoverflow.com/questions/4718934/sqlite-issues-with-htc-desire-hd
http://stackoverflow.com/questions/6444170/sqlite3-wal-databaseerror-file-is-encrypted-or-is-not-a-database
发表评论
-
打印调用堆栈
2019-11-15 15:48 489平常我们遇到不清楚代码逻辑的,可以通过打印调用堆栈来理清楚,如 ... -
你知道Log.isLoggable
2018-11-23 14:15 967我们可以通过Log.isLoggable来动态开关log的输出 ... -
android:allowUndo
2018-04-25 16:51 788Android 在Android 23增加了UndoManag ... -
mipmap-xxx
2015-12-10 11:35 1109最近在看AOSP,发现mipmaps, 百度 了一下,发现有各 ... -
《Android.Programming.Pushing.the.Limits].Erik.Hellman》记录1
2015-10-29 10:56 581最近在看《Android.Programming.Pushin ... -
System.currentTimeMillis() uptimeMillis elapsedRealtime 区别
2015-10-28 20:02 1321转自http://blog.csdn.net/wutianyi ... -
GPS的开关设置
2015-09-29 18:36 2040//modify by hyxu 2015-9-30 to s ... -
DialogFragment
2015-09-25 13:56 1056public class YesNoDialog extend ... -
ANDROID L——RecyclerView,CardView导入和使用
2015-07-23 09:51 961转自http://blog.csdn.net/a3969019 ... -
IntentService 和ResultReceiver
2015-07-22 20:00 814转自[url] http://javatechig.com/a ... -
Android media媒体库分析之:分类别统计媒体文件大小
2015-07-21 20:07 554转自http://www.linuxidc.com/Linux ... -
java.lang.IllegalArgumentException: Service Intent must be explicit
2015-07-21 20:03 1308转自:http://www.2cto.com/kf/20150 ... -
Context 和Application Context
2015-02-11 15:14 885http://possiblemobile.com/2013/ ... -
ContentProviderOperation.Builder 中withValue和withValueBackReference的区别
2015-02-10 14:01 2204关于ContentProviderOperation.Buil ... -
AndroidManifest.xml的Service元素 android:process设置
2013-05-30 17:02 11492转自:http://galin.blog.sohu ... -
android中打包含有Activity以及资源文件的jar包在工程中调用
2013-05-28 15:00 1323转自:http://www.cnblogs.com/vaiya ... -
Android杂谈--内存泄露(1)--contentView缓存使用与ListView优化
2012-11-01 09:29 2838转自:http://www.cnblogs.com/louli ... -
Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
2012-10-31 14:32 1893转自:http://www.eoeandroid.com/th ... -
Animation
2012-10-30 13:41 1138转自:http://hi.baidu.com/wendaoer ... -
Android onTouchEvent和onInterceptTouchEvent
2012-10-24 15:05 1292ViewGroup里的onInterceptTouchEven ...
相关推荐
WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 二、WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback ...
SQLite是一个开源、轻量级的数据库管理系统,常用于嵌入式环境,如移动应用或桌面应用,无需单独的服务器进程。在Java环境中,通过SQLite-JDBC驱动,我们可以使用SQLite数据库。压缩包中的“Sqlite的jar和测试代码”...
2. **数据库日志清理**:SQLite3在处理事务时会产生wal(Write-Ahead Logging)日志文件和shm文件,如`.svn/wc.db-wal`和`.svn/wc.db-shm`。如果这些文件未正常清理,可能导致svn操作异常。你可以手动删除这两个文件...
SQLite3的API提供了丰富的函数,例如`sqlite3_open()`用于打开或创建数据库,`sqlite3_exec()`用于执行SQL命令,`sqlite3_prepare_v2()`和`sqlite3_step()`用于预编译和执行SQL语句,以及`sqlite3_finalize()`用于...
11. **日志和回滚**:SQLite3使用WAL(Write-Ahead Logging)日志模式,提高了并发性能,并提供了崩溃恢复能力。 12. **错误处理**:SQLite3返回错误代码和错误消息,帮助开发者诊断和修复问题。 通过解压“sqlite...
SQLite3是一种轻量级、开源的嵌入式数据库引擎,广泛应用于各种软件系统,特别是对数据存储有需求但不需要完整数据库服务器的场合。标题“sqlite3开发包3.8”表明我们将讨论的是SQLite3的3.8版本,这是一个重要的...
SQLite3 是一个开源的、自包含的、无服务器的、零配置的、事务性的 SQL 数据库引擎,适用于各种操作系统和编程语言。它以其轻量级、高效和可靠而闻名,常用于嵌入式系统和移动应用。在 x64 架构上,SQLite3 提供了...
SQLite3是一款轻量级的数据库引擎,广泛应用于嵌入式设备和移动应用中。由于它的体积小、无需服务器进程,因此在许多场合下是理想的选择。然而,随着数据量的增长和复杂查询的增加,性能优化变得至关重要。本文将...
6. 复制和同步:SQLite3提供了wal(Write-Ahead Logging)日志模式,优化了写操作的性能,并支持热备份和数据库复制。 7. 动态类型:SQLite3采用动态类型系统,数据类型根据值自动确定,这增加了灵活性。 8. 支持...
SQLite3提供了一系列C语言风格的API接口,如`sqlite3_open()`用于打开数据库,`sqlite3_exec()`用于执行SQL语句,`sqlite3_prepare_v2()`用于编译SQL语句,以及`sqlite3_step()`和`sqlite3_column_*()`用于遍历查询...
本项目“SQLite3的使用测试程序”是用C语言编写的,用于评估SQLite3在不同条件下的性能表现,特别是关注线程模型、Write-Ahead Logging (WAL) 机制以及事务提交策略的影响。 1. **线程模型**: SQLite3 支持多线程...
参考杨万青写的《ASP.NET Core与Restful API开发实战》,这本书写的不错,但是书中使用的是Sql Server,我一般不用这个数据库,为了学习方便,我的DEMO使用的是Sqlite3,这种数据库太好用了。另外DEMO里面也去掉了书...
SQLite3使用了一种叫做“wal”(Write-Ahead Logging)的日志模式来保证数据一致性,工具可能需要利用日志信息来帮助恢复。 3. **修复阶段**:一旦分析完成,工具将尝试修复发现的问题。这可能包括重新组织页、修复...
8. 性能优化:尽管SQLite3性能出色,但还可以通过调整配置选项,如启用WAL(Write-Ahead Logging)模式,来进一步提升性能。WAL模式提高了并发性和恢复速度,减少了锁竞争。 9. 数据类型:SQLite3采用动态类型系统...
- **性能优化**:学习如何通过配置选项和编程技巧优化SQLite3的性能,如启用WAL模式以提高写入速度,或者使用索引来加速查询。 - **错误处理**:掌握错误检测和报告机制,确保在遇到问题时能够快速定位和修复。 - ...
2. 日志模式:SQLite3有多种存储引擎,如WAL(Write-Ahead Logging)模式提供更好的并发性和恢复能力。 3. 优化:通过合理设计索引、避免全表扫描、限制结果集大小等方式提高查询效率。 六、备份与恢复 SQLite3...
9. **性能优化**:SQLite3支持多种优化策略,如索引使用、VACUUM操作以压缩数据库空间、WAL(Write-Ahead Logging)日志模式以提高并发性能。 10. **嵌入式特性**:由于其轻量级和无服务器的特性,SQLite3非常适合...