我读过很多话题,但我想不出问题的答案:有可能同时读和写吗?

我有后台线程,更新一些数据,UI需要存储在数据库中的一小部分数据.因此,在UI中执行线程 Select 操作.但它会在更新过程中阻塞.因此,UI冻结了几秒钟.

有没有人在写的时候能成功地从数据库中读取数据?


可以在iPhone上读写DB.造成这种差异的原因是在本地sqlite函数上同步实现包装器吗?

推荐答案

在Android 3.0及更高版本上,SQLiteDatabases支持WAL模式(预写日志(log)记录):

如果未启用预写日志(log)记录(默认设置),则不会启用

相反,启用预写日志(log)记录时,写入操作 发生在允许继续读取的单独日志(log)文件中 同时.当写入正在进行时,其他线程上的读取器 将感知写入之前的数据库状态 开始了.写入完成后,其他线程上的读取器将 感知数据库的新状态.

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#enableWriteAheadLogging()

要在WAL模式下启动事务,请使用BeginTransactionNoneExclusive()而不是beginTransaction().

In simpler words: call beginTransactionNonExclusive() for IMMEDIATE mode and we can read while another thread is writing (the state before the write transaction started because we won't use read_uncommitted connections -> http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Dirty_reads).

Database相关问答推荐

撤销语句释放类实例中可用的缓冲区

是否有一个简单的工具可以将 mysql 转换为 postgresql 语法?

PostgreSQL WHERE IN LIKE 查询

Select 正确的数据库:MySQL 与Everything 其它数据库

无法使用命令行运行 liquibase

如何将新架构添加到现有的 Visual Studio 数据库项目?

Zend 框架 - 为什么我应该使用数据映射器/Db_Table_Row?

查询表的外键关系

保存图像:文件还是 blob?

如何将数据库从一台计算机复制到另一台计算机?

nvarchar (50) 与 nvarchar (max) 的含义

JOOQ 与Hibernate

从 postgresql 转储文件填充 MySQL 数据库

Oracle 的免费桌面客户端?

Android 上的测试数据库:ProviderTestCase2 还是 RenamingDelegatingContext?

数据库与微服务的一致性

PHP 可以与 MS SQL 数据库一起使用吗

复式记账的关系数据模型

美国城市和州的列表/数据库

获取 SQL Server 2008 中新插入行的主键