网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月30日漏签0天
sqlite吧 关注:1,200贴子:1,752
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回sqlite吧
>0< 加载中...

QT程序中使用sqlite,频繁出现数据库损坏的情况

  • 取消只看楼主
  • 收藏

  • 回复
  • 戏言zare
  • 白丁
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的所有数据库操作使用单例模式来进行,以下是单例的部分代码:
#ifndef DATABASETHREAD_H
#define DATABASETHREAD_H
#include <QThread>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include "myquerymodel.h"
#include <QSqlError>
#include <QVariant>
#include <QDate>
#include "ParamStruct.h"
#include <QMutexLocker>
class DatabaseThread : public QThread
{
Q_OBJECT
public:
explicit DatabaseThread(QObject *parent = nullptr);
static DatabaseThread *Instance(){
if(!s_DatabaseThread){
QMutexLocker locker(&mutex);
if(!s_DatabaseThread){
s_DatabaseThread = new DatabaseThread;
}
}
return s_DatabaseThread;
}
static void deleteInstance(){
if(s_DatabaseThread){
s_DatabaseThread->quit();
s_DatabaseThread->wait();
s_DatabaseThread->deleteLater();
s_DatabaseThread = Q_NULLPTR;
}
}
QStringList getNuclideList();
QStringList getAlphaList();
QStringList getBetaList();
QString getNuclideType(QString name);
QStringList getSpecimenList();
QStringList getNoquenchlst();
QStringList getAlphaBetaList();
double getActive(QString name);
double getActive_curve(QString name);
void getActive_noquench(QString name,double &h,double &c);
void getActive_AB(QString name,double &alpha,double &beta);
bool addTask(TaskParam task);
QStringList getTaskList();
MyQueryModel* getNuclideModel();
TaskParam getTaskParam(QString name);
TaskParam getHisTask(QString taskid);
MyQueryModel* getNoquenchModel();
MyQueryModel* getQuenchModel();
MyQueryModel* getSpecimenModel();
MyQueryModel* getAlphaBetaModel();
bool delTask(QString name);
void getHalfLife(QString nuclide,float &half,QString &unit);
bool updateNuclide(QString name,QString half,QString unit,QString type,QString ener);
bool updateNuclide(QString name,QString half,QString unit,QString type,QString ener,
QString hv1,QString hv2,QString hv3,QString vts1,QString vts2,QString vts3,QString mag,QString tcr,QString tcr_);
bool addNuclide(QString name,QString half,QString unit,QString type,QString ener);
bool addNuclide(QString name,QString half,QString unit,QString type,QString ener,
QString hv1,QString hv2,QString hv3,QString vts1,QString vts2,QString vts3,QString mag,QString tcr,QString tcr_);
bool delNuclide(QString name);
QVector<quint16> getNuclideHv(QString name);
QVector<quint16> getOtherParam(QString name);
private: static DatabaseThread *s_DatabaseThread; static QMutex mutex; QSqlDatabase db; int command; MyQueryModel *nuclider_model; MyQueryModel *noquench_model; MyQueryModel *quench_model; MyQueryModel *specimen_model; MyQueryModel *alphabate_model; QSqlQueryModel *hisdata_model; QSqlQuery *taskqry;
void checkAndCreateTable();signals:
};
#endif // DATABASETHREAD_H
下面是cpp文件的部分代码:
#include "databasethread.h"
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include "math.h"
DatabaseThread *DatabaseThread::s_DatabaseThread = 0;
QMutex DatabaseThread::mutex;
DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
{
if(QSqlDatabase::contains("Data"))
db = QSqlDatabase::database("Data");
else
db = QSqlDatabase::addDatabase("QSQLITE","Data");
db.setDatabaseName("Liquidflash.db3");
db.open();
//checkAndCreateTable();
nuclider_model = new MyQueryModel(this);
noquench_model = new MyQueryModel(this);
quench_model = new MyQueryModel(this);
specimen_model = new MyQueryModel(this);
alphabate_model = new MyQueryModel(this);
hisdata_model = new QSqlQueryModel(this);
taskqry = new QSqlQuery(db);
}
我特意建了一个新的数据库,里面数据很少,但是仅使用了一天后,又出现了这种情况

整个数据库才1mb,想请教各位大佬,这种情况一般是怎么产生的?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回sqlite吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示