c# 多线程 *** 作数据库

c# 多线程 *** 作数据库,第1张

1共用一个连接就可以 2其实一样可以用lock实现,把数据库 *** 作写成一个函数,函数内加lock。c#会安排他们排队 比如 private static object privateObjectLock = new object() public static xxoo(){ lock(privateObjectLock) { //数据 *** 作语句 } } } 你在一个函数里实现数据库 *** 作。然后线程 *** 作数据库都调用他

连接数据库要连接池,就是connection对象要放在一个LinkedList里面,然后每个线程一个。这个这个List被封装在一个单例模式的对象里。线程要是共享connection,要是搞起并发来,一下子就挂了。

#include <QCoreApplication>

#include "thread.h"

#include <QVector>

#include <QDebug>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv)

QVector<Thread*>vector

Thread *thread

//创建多个线程,并start

for(int i=0i<10i++){

thread=new Thread

vector.append(thread)

thread->set(i)

thread->start()

}

//等待所有线程执行完,然后删除线程

foreach(thread,vector){

thread->wait()

}

foreach(thread,vector){

delete thread

}

return a.exec()

}

-------------------------------------------------------------------------------------------------

#include "thread.h"

Thread::Thread(QObject *parent) : QThread(parent)

{

}

void Thread::run()

{

begin()

}

//为每个线程创建一个连接名

void Thread::set(int a)

{

connectionName=QString::number(a)

}

void Thread::connectionDatabase(QString dbName)

{

QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL",connectionName)

db.setHostName("localhost")

db.setDatabaseName(dbName)

db.setUserName("root")

db.setPassword("")

if(!db.open())

qDebug()<<"db open fail"

}

void Thread::begin()

{

QString dbName="learnsql"

connectionDatabase(dbName)

QSqlDatabase db=QSqlDatabase::database(connectionName)

db.transaction()//开启事物

QSqlQuery query(db)

//向表student中插入10000条数据

for(int i=1i<=10000i++){

query.exec("insert into student values(1)")

}

db.commit()//提交事物

}


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

原文地址: http://outofmemory.cn/sjk/9243808.html

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

发表评论

登录后才能评论

评论列表(0条)

保存