安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....

项目中频繁的切换Tab键,会频繁地从数据库读取数据,这是报出这样的错误:

解决方法是在国外的某论坛找到的 :

在插入数据的时候,首先:

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(f, null);
db.beginTransaction();   ////开启一个事务
db.insert(HJZ_SQLiteOpenHelper.TABLE_NAME_KP, null, cv);
db.setTransactionSuccessful(); //必须加这一句,否则插入不了数据
db.endTransaction();  ////关闭一个事务
db.close();

原因:是4.0以前的版本db.close();会结束事务,而Jelly Bean 以后的版本因为安全性的问题,必须结束即endTransactiony以后才能再次访问本地数据库。哎。。苦逼的百度啊。。另外,吐槽一下不向下兼容的Android

PS:android中,对数据库进行批量操作时,建议先打开会话:

db.beginTransaction();

//批量insert或者update等
db.setTransactionSuccessful();
db.endTransaction();

这样之后,在大数据量的处理是灰常的高效,

实际中,减少了3~10倍的时间。

另外,在重写ContentProvider时,不要针对数据的读写加同步了,因为底层数据库已经做了同步保护,上层再加上同步保护多余,而且非常影响效率。

时间: 2024-10-05 06:17:34

安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....的相关文章

Android多线程操作sqlite(Sqlite解决database locked问题)

参考http://blog.csdn.net/sdsxleon/article/details/18259973  很好 https://github.com/2point0/Android-Database-Locking-Collisions-Example 示例 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=333473 http://bbs.51cto.com/thread-990260-1.html 用事务,速度会很会 方

SQLITE报错database is locked的解决办法

用firedac连接SQLITE数据库,空间tdbedit绑定字段name,如下语句修改其值时报错. procedure TForm1.Button3Click(Sender: TObject);begin fdquery.Edit; fdquery.FieldByName('name').AsString:='test2'; fdquery.post;   //执行到这里报错 [FireDAC][Phys][SQLite] ERROR: database is locked. 换成refres

android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error(Sqlite code 14): Could not open database,(OS error - 13:Permission denied)

07-24 15:03:14.490 6291-6291/com.tongyan.nanjing.subway E/SQLiteDatabase: Failed to open database '/storage/emulated/0/TYSubway/structure/db/TYSubwayInspcetionNJ.db'. android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error(Sqlite code

解决SQLite中的 database is locked

前些时候,同事在站点服务端使用SQlite存储一些临时数据,但是在多人并发的时候Sqlite会抛出异常:The database file is locked , database is locked,而且这个是在客户生产环境下提示出来的,开发环境很难重现,同事实在没辙,竟然想发动所有研发同事通过操作软件重现问题,我只能呵呵了.既然是Sqlite的原因,直接写个小程序测试下sqlite不就行了,而且就算重现了,难不成要改Sqlite源码... Sqlite的特点: 简单(simple):SQLi

SQLite EF Core Database Provider

原文链接 This database provider allows Entity Framework Core to be used with SQLite. The provider is maintained as part of the Entity Framework Core project. Supported Database Engines SQLite (3.7 onwards) Supported Platforms .NET Framework (4.5.1 onward

Create schema error (unknown database schema '')

Andrey Devyatka 4 years ago Permalink Raw Message Hi,Please tell me, can I use the static library in the following case: library.hpp:#ifndef _CPP_ODB_STATIC_LIBRARY_CPP_#define _CPP_ODB_STATIC_LIBRARY_CPP_#include <odb/database.hxx>odb::database* cr

hybrid应用的database locked问题

SQLite是库级锁,支持并发读,但是不支持并发写.所以如果多个线程同时进行写操作,就有可能造成database locked问题.如果是纯原生应用,这篇文章介绍了怎么利用FMDatabaseQueue避免锁库: 使用FMDatabaseQueue避免database locked问题 但是如果是hybrid应用,就相对比较复杂,我们的APP就踩坑了.刚开始搭框架的时候,使用cordova搭建了hybrid框架,并使用SQLitePlugin,来支持js访问数据库.然后原生的部分,就用FMDB来

BOA+PHP+SQLite之SQLite

三.SQLite 在ARM-Linux平台上移植SQLite (陈云川 200620603001 [email protected] 四川成都)摘要:本文首先对嵌入式数据库SQLite做了简单的介绍,对移植所采用的软硬件平台作了简单的说明.然后以SQLite3为蓝本对移植过程中的细节作了详细的说明,并对移植后的SQLite3数据库进行了测试.测试结果表明,本文所采取的移植方式是有效的.关键字:ARM-Linux.嵌入式.SQLite Port SQLite to ARM-Linux Platfo

C#使用System.Data.SQLite操作SQLite

使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到System.Data.SQLite.dll添加到工程引用: 建表,插入操作 static void Main(string[] args) { SQLiteConnection conn = null; string dbPath = "Data Source =" + Environmen