基于Sqlite数据库的读写
#include "databaserw.h"
#define USERDATABASE 0
#define LOGDATABASE 1
#define DATASAVEDATABASE 2
dataBaseRW::dataBaseRW(QObject *parent) : QObject(parent)
{
qDebug()<<"------------------------------------------------------------";
qDebug()<<"Database thread start! ThreadID:"<<QThread::currentThreadId();
qDebug() << QSqlDatabase::drivers();
open_database();
}
dataBaseRW::~dataBaseRW()
{
}
void dataBaseRW::open_database(void)
{
// isDBOpen_user = open_database_user();
// isDBOpen_dataSave = open_database_dataSave();
isDBOpen_log = open_database_log();
qDebug()<<"All database has been opend!";
}
void dataBaseRW::close_database(void)
{
// close_database_user();
// close_database_dataSave();
close_database_log();
qDebug()<<"All database has been closed!";
}
//获取数据库查询指针
QSqlQuery* dataBaseRW::get_database_query(int type)
{
QSqlQuery *val;
switch (type)
{
case USERDATABASE://用户
val = user_query;
break;
case LOGDATABASE://日志
val = log_query;
break;
case DATASAVEDATABASE://落盘
val = datasave_query;
break;
default:
val = NULL;
break;
}
return val;
}
//查询用户数据库条目数
int dataBaseRW::get_database_count(int type)
{
int count = 0;
QString select_sql;
QSqlQuery *sql;
switch (type)
{
case USERDATABASE://用户
select_sql = "SELECT * FROM UserInfo";
sql = get_database_query(USERDATABASE);
qDebug() << "正在查询用户数据库条目数...";
break;
case LOGDATABASE://日志
select_sql = "SELECT * FROM SystemLog";
sql = get_database_query(LOGDATABASE);
qDebug() << "正在查询日志数据库条目数...";
break;
case DATASAVEDATABASE://落盘
select_sql = "SELECT * FROM DataSave";
sql = get_database_query(DATASAVEDATABASE);
qDebug() << "正在查询落盘数据库条目数...";
break;
default:
sql = get_database_query(LOGDATABASE);
select_sql.clear();
count = 0;
break;
}
if(!select_sql.isEmpty())//不为空则进行查询
{
sql->exec(select_sql);
sql->last();
count = sql->at()+1;
qDebug() << "查询到数据库条目数:"<<count;
}
return count;
}
/******************************************************************************/
/* 日志数据库 */
/******************************************************************************/
//打开日志数据库
bool dataBaseRW::open_database_log(void)
{
if (QSqlDatabase::contains("log_database"))
{
database_log = QSqlDatabase::database("log_database");
}
else
{
database_log = QSqlDatabase::addDatabase("QSQLITE","log_database");
database_log.setDatabaseName("./database/LogDB.db3");
}
if( !database_log.open())
{
qDebug()<<"无法打开用户数据库连接";
return false;
}
else
{
log_query = new QSqlQuery(database_log);
//判断数据库是否存在
bool isTableExist = log_query->exec("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='SystemLog'");
if(!isTableExist)
{
qDebug() << "数据库不存在!!";
//用户数据库不存在
//添加表和项目
QString sql = "CREATE TABLE SystemLog("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"event TEXT,"
"user TEXT,"
"data TEXT,"
"time TEXT"
")";
log_query->exec(sql);
QString currentTime,currentDate;
currentTime = QTime::currentTime().toString("hh:mm:ss.zzz");
currentDate = QDate::currentDate().toString("yyyy/MM/dd");
log_query->prepare("INSERT INTO SystemLog (event,user,date,time) VALUES (:event, :user, :date, :time)");
log_query->bindValue(":event", "数据库未找到或已损坏,重建数据库");
log_query->bindValue(":user", "站控系统");
log_query->bindValue(":date", currentDate);
log_query->bindValue(":time", currentTime);
log_query->exec();
}
else
{
qDebug() << "日志数据库已存在";
get_database_count(LOGDATABASE);
}
#if (PRINT_ALL_LOG == 1)
//启动时罗列全部
QString select_sql = "SELECT * FROM SystemLog";
if(!log_query->exec(select_sql))
{
qDebug()<<log_query->lastError();
}
else
{
while(log_query->next())
{
int id = log_query->value(0).toInt();
QString event = log_query->value(1).toString();
QString user = log_query->value(2).toString();
QString data = log_query->value(3).toString();
QString time = log_query->value(4).toString();
qDebug()<<id<<event<<user<<data<<time;
}
}
#endif
}
return true;
}
//关闭日志数据库
void dataBaseRW::close_database_log(void)
{
if(database_log.isOpen())
{
database_log.close();
}
qDebug()<<"日志数据库已关闭";
}
//记录日志
void dataBaseRW::record_log(QString event, QString user)
{
QString currentTime,currentDate;
currentTime = QTime::currentTime().toString("hh:mm:ss.zzz");
currentDate = QDate::currentDate().toString("yyyy/MM/dd");
if(isDBOpen_log)
{
log_query->prepare("INSERT INTO SystemLog (event,user,date,time) VALUES (:event, :user, :date, :time)");
log_query->bindValue(":event", event);
log_query->bindValue(":user", user);
log_query->bindValue(":date", currentDate);
log_query->bindValue(":time", currentTime);
log_query->exec();
//qDebug()<<"Thread ID:"<<QThread::currentThreadId()<<"log saved";//输出测试
}
}
#ifndef DATABASERW_H
#define DATABASERW_H
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QTime>
class dataBaseRW : public QObject
{
Q_OBJECT
public:
explicit dataBaseRW(QObject *parent = nullptr);
~dataBaseRW();
QSqlDatabase database_user,database_log,database_datasave;
QSqlQuery *log_query,*user_query,*datasave_query;
bool isDBOpen_user,isDBOpen_log,isDBOpen_dataSave;
void open_database(void);
void close_database(void);
QSqlQuery* get_database_query(int type);
int get_database_count(int type);
bool open_database_log(void);
void close_database_log(void);
void record_log(QString event, QString user);
signals:
public slots:
void test_slot_for_database();
void record_log(QString event, QString user);
void record_dataSave(QByteArray data);
void insert_user(int userid,QString username,QString password);
void delete_user(QString username);
};
#endif // DATABASERW_H