UI线程读 , 另一个线程写同一个sqlite
我有这样一个应用, UI线程,使用 QSqltablemodel 和 Qtableview 显示数据库里面的数据。 在UI线程中中创建了另一个线程,用于不停采集数据,向数据库插入。 数据很小时,显示和插入就没有问题。但是当sqlite里数据量大了以后,只要UI线程一执行select(),另一个线程的的 query.exec() 就返回false里。请教破解方法! 我的代码类似这样:在UI线程中创建一个数据库连接 复制代码processDisplayDB =new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE","processDisplaydb")); processDisplayDB->setDatabaseName("databases/ProductionData.s3db"); if(!processDisplayDB->open()){ qDebug()<<"Could not open file!"<<endl; return; }else{ qDebug()<<"Open file: "<<processDisplayDB->databaseName()<<" sucessfully!"<<endl; } modelProcessDisplay = new QSqlTableModel(ui->tableViewProcessDisplay,*processDisplayDB); modelProcessDisplay->setTable("processtable");然后通过定时器周期触发刷新信号,复制代码connect(&cylicTimerProcessDisplay,&QTimer::timeout,this,&MainWindow::processDisplayUpdate_cylic);通过刷新来更新tableview内容复制代码void MainWindow::processDisplayUpdate_cylic(){ modelProcessDisplay->select();}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////另外一个线程是,建了另外一个连接到同一个数据库 复制代码processDB = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE","processDB")); processDB->setDatabaseName("databases/ProductionData.s3db"); if(!processDB->open()){ qDebug()<<"Could not open file!"<<endl; return; }else{ qDebug()<<"Open file: "<<processDB->databaseName()<<" sucessfully!"<<endl; }然后数据采集到以后,写入数据库复制代码QSqlQuery query(*processDB); qDebug()<<"insert processtable prepare : " <<query.prepare("INSERT INTO processtable(SerialNo) " "VALUES(:SerialNo)"); query.bindValue(":SerialNo",currentSerialNo); qDebug()<<"insert processtable: "<<query.exec();现在的问题是,当sqlite里数据量增大后, qDebug()<<"insert processtable: "<<query.exec(); 就执行不成功了。 经过检查,发现是 UI线程里 select() 引起的,但是不知道该怎么解决为好? 这个数据库是采集设备状态,肯定数据库不停增大的。请大家帮帮我看看?谢谢