求助:c++ 多线程插入数据到sqlite丢失数据

求助:c++ 多线程插入数据到sqlite丢失数据,第1张

m_vcEFileMsg.clear()

这句是否也是多线程 线程函数里面的呢?如果是那么就会悲剧。一旦有一个线程执行了这句,那么其他线程push_back的数据可能还没上传就没了。

一次性插入大量数据,只能使用循环,

如:游标,while 循环语句

下面介绍While 循环插入数据,

SQL 代码如下:

IF OBJECT_ID('dbo.Nums') IS NOT NULL

DROP TABLE dbo.Nums

GO

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY)

DECLARE @max AS INT, @rc AS INT

SET @max = 5000000

SET @rc = 1

INSERT INTO Nums VALUES(1)

WHILE @rc * 2 <= @max

BEGIN

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums

SET @rc = @rc * 2

END

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max

--以上函数取自Inside SQL Server 2005: T-SQL Query一书。

INSERT dbo.Sample SELECT n, RAND(CAST(NEWID() AS BINARY(16))) FROM Nums

把存储数据的数据所有的数据结构 换成 线程安全的集合,例如用Vector 而不用 ArrayList 用HashTable 而不用HashMap ,用StringBuilder 而不用StringBuffer

多线程共有的函数尽量声明为 synchronized ,复杂的数据交互,在线程与线程的时间间隙里面最好不要调用 Thread.sleep方法,另外数据的传输,组号采用字节流,而不要采用字符流,文件的读取访问最好使用单例模式。

一般是在服务器端加,没有必要在客户端端加


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11643378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存