数据库sqlite3能否执行多线程写操作?

VS代码:
#pragma omp parallel for

for(int i=0;i<OutNum;i++)
{
    Outtable.setRow(i);
    Out = Outtable.getStringField(0);

    for(int j=i+1;j<OutNum;j++)
    {
        Outtable.setRow(j);
        OutRe = Outtable.getStringField(0);
        bufSQL.format("insert into OutSet_OverSet select ...;
        db.execDML(bufSQL);
    }
}

另外对于for循环执行数据库写操作,还有什么方法能对其进行优化?
这段代码执行的时间太长了
0

2个回答

sqlite3应该支持多线程,你应该是主要优化你的sql语句,估计有性能问题

0
oyljerry
oyljerry 回复lintongtale: sql换成存储过程试试
接近 4 年之前 回复
lintongtale
lintongtale 我查了资料sqlite3并不支持同时写操作,只支持同时读。另外,我的sql语句只有一句相对复杂一点的插入操作,很难再进行优化
接近 4 年之前 回复

用批处理写入数据库更加有效率

0
lintongtale
lintongtale 批处理具体该怎么实现?sqlite3不支持同时写操作,有没有影响?
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多线程下使用sqlite
转载地址:http://blog.csdn.net/yhawaii/article/details/8943358 这位大神的很多博文都值得一看的哦 目录(?)[+] sqlite多线程概述 这几天研究了一下SQLite这个嵌入式数据库在多线程环境下的应用,感觉里面的学问还挺多,于是就在此分享一下。 先说下初衷吧,实际上我经常看到有人抱怨SQL
并发操作Sqlite3
1. Sqlite3可以设置脏读模式,在一个线程写数据的同时另一个线程可以读数据。设置方法:http://blog.csdn.net/u011726005/article/details/76944684 。 2. 多个线程可以同时进行读操作,但是同一时刻只能有一个线程去进行写操作,并且在一个线程进行写操作的时候,其他线程是不能进行读操作的。当一个线程正在写操作时,其他线程的读写都会返回操作失败
sqlite的线程安全与并发
SQLite 线程安全和并发SQLite 与线程SQLite 是线程安全的。线程模型SQLite 支持如下三种线程模型单线程模型 这种模型下,所有互斥锁都被禁用,同一时间只能由一个线程访问。多线程模型 这种模型下,一个连接在同一时间内只有一个线程使用就是安全的。串行模型 开启所有锁,可以随意访问。设置线程模型SQLite 可以通过以下三种方式进行线程模型的设置,在实际应用中选择任一一项都可以。编译...
SQLite多线程下的并发操作
这两天一直在捣鼓SQLite数据库,基本的操作就不说了,比较简单,打算有空的话另起一篇博文简单总结一下。 这里主要想探讨一下多路并发下的数据库操作 SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求。 如果
多线程环境下SQLite数据库并发访问的解决方案
Android开发——多线程环境下SQLite数据库并发访问的解决方案 2015年01月16日 ⁄ Android开发经验 ⁄ 共 3695字 ⁄ 字号 小 中 大 ⁄ 评论关闭 在多线程环境下,使用数据库必须很小心,否则很容易出现各种各样的异常,最常见的三个异常是:android.database.sqlite.SQLiteDatabase
fastDB个人使用心得
fastDB开始使用的时候,经常会出现程序无缘无故的挂掉,或者频频出现一些操作失败的现象,这些错误信息可以自己加日志获取。让使用的人心惊胆战。毕竟fastDB没有经过专门的商业测试,但是使用fastdb实现进程之间通信是非常方便且快速的,这也是很多人使用它的原因。作者用了很长的时间工程使用和测试,终于探索出一条可行的道路,总结了一些经验和大家分享,希望能给大家带来帮助。   1、在工程项目中,
Sqlite3多线程读写解决方案
原标题:SQLite And Multiple Threads SQLite 支持三种线程模式: 1. 单线程模式     这种模式下,没有进行互斥,多线程使用不安全 2. 多线程模式     这种模式下,在多线程中使用单个数据库连接是不安全的,否则就是安全的。(译注:即不能在多个线程中共享数据库连接) 3. 串行模式     这种模式下,sqlite是线程安全的。(译注:即使在
sqlite多进程并发读写模式下,返回SQLITE_BUSY错误的处理方法
SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求,这是由于使用当前连接访问数据时,要申请相应级别的锁,而各个级别的锁有些是互斥的,当申请不到锁时就会返回这个错误。这时只要稍等片刻,等其它连接的操作处理完,释放了
利用读写锁实现sqlite多线程写的问题
之前项目中利用sqlite存储解析后的数据,网上的资料并没有找到sqlite本身机制对于多线程如何支持,所以就利用每个线程一个库,最后在合并,今天看到读写锁SRWLOCK时,决定尝一下解决多线程写sqlite的问题如愿解决:    测试代码    main函数中:sqlite3_open_v2(&quot;test.db&quot;,&amp;amp;m_db,SQLITE_OPEN_CREATE|SQLITE_OPEN_R...
SQLite性能和限制 多进程
性能和限制 SQLite是一个很快的数据库,但"快"这个词本身是一个主观的和模糊不清的词。坦白地讲,对于有些事情,SQLite比其他数据库做得快,也有些事情比不上其他数据库。利用SQLite提供的配置参数,SQLite是足够快速和高效的。与大多数数据库一样,SQLite使用B-tree做索引,使用B+-tree处理表。因此,在对单表进行查询时,平均而言,SQLite与其他数据库一样快(至少不
SQLite多线程写锁文件解决方案
在sqlite编程中多线程同时写时会出现异常,我写了个类来解决这个问题。 思路很简单,就是在开始写操作时,记下写操作的托管线程id,表示目前有线程正在做写操作;其他线程来写时,需要先检测是否有进程正在做写操作,如果有就需要等待,等待到某一个配置的超时时间时,会抛出异常终止等待;如果没有则直接放行,此线程可以获得写锁。最后写操作执行完毕时需要释放锁。 下面是具体的代码:/// &amp;lt;summary...
SQLite数据库中多线程使用问题
由于项目是接手之前的烂尾项目,经常被吐槽说界面卡半天,后来发现项目里的网络请求,数据库操作都是在主线程。将一些长时间的操作换到多线程或者异步之后后,用户交互是变的顺畅多了,可是经常出现莫名其妙的闪退,还有数据插入错表的情况(用户表数据插入到消息表中)。 因为项目比较早,用的三方库都比较旧,所以数据库用的是SQLitePersistentObject,本以为是数据库比较老旧问题,因为数据操作遍布数
sqlite能不能多线程并发访问
这两天一直在捣鼓SQLite数据库,基本的操作就不说了,比较简单,打算有空的话另起一篇博文简单总结一下。 这里主要想探讨一下多路并发下的数据库操作 SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求。
sqlite数据库执行监控
有没有什么工具能直接监控到sqlite的sql语句执行呢?现在是自己在执行sqlite的时候写log打出来,感觉很麻烦。 找找看。如果实在没有,看看能不能自己写个log监控器。
python sqlite多线程编程
.前言 为什么要特别指出sqlite的多线程呢?因为创建一个sqlite连接只能给创建这个连接的线程使用,按照连接池的一般做法,先初始化几条连接conn放到池里,显然不行(别的线程用不了)。如果换一种策略,在第一次使用连接时,才由线程创建连接,然后映射到线程推到池里,在连接使用前先验证连接是否可用--这是一种不错的实现。 下面,是简单实现,不涉及池~~,有时间在实现。 首先,
Linux下sqlite3多线程和串行模式
sqlite3支持三种模式:单线程模式,多线程模式和串行模式。 模式可在编译,启动时或运行时设置,一般来讲,启动时的设置会覆盖编译时的设置,运行时则会覆盖启动时或编译时的设置。但是一旦单线程模式被设置之后就不能再被覆盖了。 编译时可通过SQLITE_THREADSAFE设置模式。sqlite3标准 发行版本默认设置为SQLITE_THREADSAFE=1, 即串行模式。SQLITE_THREADSA
SQLite3 - 文件锁和同步机制
SQLite3 - 文件锁和同步机制
sqlite3 解决并发读写冲突的问题
1 #include "stdafx.h" 2 #include "sqlite3.h" 3 #include 4 #include 5 6 //sqllite 相关变量 7 sqlite3 *sql_db; 8 char *sql_ErrMsg; 9 int sql_rc; 10 sqlite3_stmt *sql_statement; 11 12
Sqlite数据库多线程并发问题
(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗? 多进程可以同时打开同一个数据库,也可以同时 SELECT 。但只有一个进程可以立即改数据库。 SQLite使用读/写锁定来控制数据库访问。(Win95/98/ME 操作系统缺乏读/写锁定支持,在低于 2.7.0 的版本中,这意味着在 windows 下在同一时间内只能有一个进程读数据库。在版本 2.7.0
QT中sqlite多线程操作4个注意问题
总结了一下Qt中sqlite多线程操作遇到的几个问题,希望能对有需要的朋友一点帮助
解决多线程并发访问SQLite数据库
java.lang.IllegalStateException: attempt to re-open an already-closed object        使用单例实现:如下 import android.database.sqlite.SQLiteDatabase;  import android.database.sqlite.SQLiteOpenHelper;  im
iOS 多线程中使用SQLite
1、SQLite多线程 SQLite支持三种不同的线程模式: ①单线程(Single-thread) 该模式下,所有的互斥锁被禁用;SQLite在多线程中使用是不安全的。 当SQLite编译时加了SQLITE_THREADSAFE=0参数,或者在初始化SQLite前调用sqlite3_config(SQLITE_CONFIG_SINGLETHREAD)时启用该模式。 ②多线程(Mult
qt数据库多线程问题的解决
Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的 几乎国内没有文章提到这个问题,这几天在做数据库压力测试时遇到了 假设有如下代码: bool openDatabase() { QSqlDatabase db; QString conn
SQLite的多线程使用
 SQLite的多线程应用与iOS开发 对于SQLiite支持多线程的问题,我找到一片很不错的文章: http://www.keakon.net/2011/10/25/SQLite%E5%9C%A8%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%9A%84%E5%BA%94%E7%94%A8 。  文章很长,需要
多进程操作sqlite的数据同步问题
背景最近写在多进程任务里操作sqlite的时候,发现数据同步是个头疼的问题。因为sqlite本身并不支持存储过程(procedure),它本身也没有可以单独调用对数据表的锁(可能是我没找到,如果有人知道还请赐教)。这就意味着在执行一系列修改数据库命令的时候会被打断,造成最后存在数据库中的数据失真。 比如说,你的银行账户里还剩100元,你存入200元,支出300元,存入100元,假设它们都是几乎同时
多线程操作数据库--WAL模式--一写多读并行
最近项目需求,要写入比较多的数据到db中,同时又不能让用户在写的过程中停止其他查询操作,也就是需要满足写读并发。通过一阵Google,发现了WAL模式。 下面介绍WAL模式的优缺点: 优点: 1. 读和写可以完全地并发执行,不会互相阻塞(但是写之间仍然不能并发)。 2. WAL在大多数情况下,拥有更好的性能(因为无需每次写入时都要写两个文件)。 3. 磁盘I/O行为更容易被预测。缺点
使用sqlite3 c++的一些坑
1,里面的数字一定要转成 字符串类型。因为sql 语句,看起来你输入的是数字,其实你输入的是字符串。 bool ZhMMMMMM::appendToXXXXXTable(std::string taskId, int maxParallelNumber) { string t_strSql = &amp;amp;quot;&amp;amp;quot;; t_strSql += &amp;amp;quot;INSERT INTO EEEELLLLTask (...
shell使用sql脚本进行sqlite3数据库更新
转载请注明出处! 1. 编写sql脚本upgradeDB.sql,其中就是普通sql语句 update tablename set colname=value where ID=value; 2. 编写shell脚本 #!/bin/sh sqlite3 -init upgradeDB.sql crane.db << EOF .quit EOF 说明:直接使用“sqlite
SQLite内存数据库与硬盘数据库
SQLite是一个非常方便好用的嵌入式数据库,没有独立的进程,随着应用程序的进程一起启动。 它可以选择是内存数据库还是硬盘数据库,通常在内存中进行数据方面的操作比硬盘上的操作快几个数量级。 在特定环境下,可以先在内存中操作数据库,然后再将数据持久化到硬盘上。 具体代码如下: #encoding=utf-8 import sqlite3 import StringIO def quer
ios sqlite3多线程操作
记录下单例的宏使用,是为了简化及统一,使用,参考前一篇文章或是去网上找相关的代码。 部分代码参考自互联网,主要是加了pthread_mutex_t, 保证线程安全, 在openDb, closeDb中lock, unlock保证安全,因此在操作数据库时,保证调用openDb, closeDb,成对使用,不要去考虑在主线程,还是其它线程中使用数据库了。 只是提供一个框架和示例,具体应用根据自己的需
【Sqlite3】使用SQL语句操作sqlite3数据库
在命令行使用SQL语句操作sqlite数据库1. 创建数据库文件(DB) $: sqlite3 DatabaseName.db 创建成功后,会自动进入sqlite命令行的界面&quot; sqlite&amp;gt; &quot; eg: $: sqlite3 testDB.db  // 打开名为testDB的数据文件,不存在则创建2. 输入&quot; .database &quot; 查看数据库文件信息 seq // 序号 name // ...
安卓数据库连接解决办法 ,避免 sqlite3 database is locked
1.说明 android的sqlite3数据库中,好像是因为数据库锁的机制问题,无法对同一个数据库同时进行写操作,所以可能爆出database is locked 的错误; 综合网上资料,觉得用单例模式,全局保持一个连接比较实用; 2.具体代码 首先具体连接数据库的代码如下: public class DataBaseOpenHelper extends android.databa
SQLite在多线程并发访问的应用
最近遇到个SQLite的问题把我卡住了小半天 SQLite不支持多线程
sqlite3 实现批量处理 sql语句,避免频繁操作数据库,从而影响性能的问题
sqlite3 实现批量处理 sql语句,避免频繁操作数据库,从而影响性能的问题。C++语言,begin开始事务,commit提交事务处理。int SQL_EXE(std::vector vtExeSql) { if (NULL == m_pDB) { return -1; } char* pErrMsg = NULL; int iRet = SQLITE_OK; iRet =
SQLite3使用总结备忘(多线程/WAL/锁等)
1、多线程下使用    rc = sqlite3_open_v2(DBFILENAME, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX, NULL); 2、多线程开启WAL模式:rc = sqlite3_exec(db, "PRAGMA journal_mode=WAL;", callback, 0, &zErrMsg); 3、WAL
sqlite3 收缩数据库命令vacuum
vacuum
Sqlite3并发读写注意事项
sqlite3的锁及事务类型sqlite3总共有三种事务类型:BEGIN [DEFERRED /IMMEDIATE / EXCLUSIVE] TRANSCATION,五种锁,按锁的级别依次是:UNLOCKED /SHARED /RESERVERD /PENDING /EXCLUSIVE。当执行select即读操作时,需要获取到SHARED锁(共享锁),当执行insert/update/delete操
嵌入式linux-sqlite3数据库,多进程并发服务器,在线词典
文章目录1,简介:2,框架图2.1,客户端框架2.1,服务器端框架3,代码3.1,客户端代码3.2,服务器端代码 1,简介: 1,在线词典功能,分为客户端和服务器端 2,客户端有三个模块:注册、登录、查询(查询单词、查询历史记录) 3,服务器端要实现多并发服务器,这里采用多进程并发服务器:注册、登录、查询(查询单词、查询历史记录) 4,用户分为普通用户和管理员用户:管理员用户可以查询所有普通用...
sqlite3 常用命令
sqlite3 常用命令介绍如果你的电脑还未安装sqlite软件,请到sqlite官网下载sqlite安装文件(Precompiled Binaries for Windows)。=================================================下面以新建test.db 对sqlite3的常用命令进行讲解。切换工作目录(.cd)首先打开sqlite后,我们需要切换到...
SQLite3 写数据库时的锁机制
转载:http://blog.csdn.net/woshinia/article/details/9063411 SQLite3 写数据库       为了写Sqlite3数据库,进程必须先获取SHARED锁。当获取SHARED锁之后,进程需要进一步申请RESERVED锁。RESERVED锁表示该进程会在不远的将来执行写数据库操作。同一时刻只有一个进程能够获取RESERVED锁。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 人工智能能否培训 java多线程学习指南