90 lines
1.7 KiB
C++
90 lines
1.7 KiB
C++
// sqlitereadwrite.h
|
|
#ifndef SQLITERREADWRITE_H
|
|
#define SQLITERREADWRITE_H
|
|
|
|
#include <QObject>
|
|
#include <QSqlDatabase>
|
|
#include <QSqlQuery>
|
|
#include <QSqlError>
|
|
#include <QThread>
|
|
#include <QMutex>
|
|
#include <QAtomicInteger>
|
|
#include <QElapsedTimer>
|
|
#include <QDebug>
|
|
#include <QDir>
|
|
#include <QCoreApplication>
|
|
struct DataBaseStruct
|
|
{
|
|
int id;//ID
|
|
int curdevconfigindex;
|
|
int orgdevconfigindex;
|
|
int icr;
|
|
int datanum;
|
|
int tick;
|
|
QByteArray data;
|
|
QString reserve;
|
|
};
|
|
|
|
class SQLiteReadWrite : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit SQLiteReadWrite(QObject *parent = nullptr);
|
|
~SQLiteReadWrite();
|
|
|
|
bool openDatabase(const QString &dbPath);
|
|
void closeDatabase();
|
|
|
|
// 边读边写操作
|
|
void startReadWriteOperation();
|
|
void stopOperation();
|
|
|
|
void setIdValue(int value);
|
|
|
|
QVector<DataBaseStruct> DataBaseList() const;
|
|
|
|
signals:
|
|
void progressUpdated(int percent, qint64 processed, qint64 total);
|
|
void operationCompleted(bool success, const QString &message);
|
|
void logMessage(const QString &message);
|
|
void emitReadId(int readId);
|
|
void emitStopTime();
|
|
|
|
private slots:
|
|
void processReadWrite();
|
|
|
|
private:
|
|
// 数据库连接管理
|
|
QSqlDatabase m_database;
|
|
QString m_dbPath;
|
|
|
|
// 线程安全
|
|
mutable QMutex m_mutex;
|
|
QAtomicInteger<bool> m_stopRequested{false};
|
|
|
|
// 性能统计
|
|
QElapsedTimer m_timer;
|
|
|
|
// 连接名(确保多线程连接唯一性)
|
|
QString m_connectionName;
|
|
|
|
// 私有方法
|
|
QSqlDatabase createConnection();
|
|
|
|
|
|
// 具体操作
|
|
void processWithMultipleConnections();
|
|
|
|
void log(const QString &message);
|
|
|
|
int idValue;
|
|
|
|
QVector<DataBaseStruct> m_DataBaseList;
|
|
|
|
bool m_isClosed = true;
|
|
|
|
};
|
|
|
|
#endif // SQLITERREADWRITE_H
|