绪论
由于原代码连接了5个数据的49张表,所以这里做了简化处理。
源码
mydatabase.h
#ifndef MYDATABASE_H
#define MYDATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QDate>
class MyDatabase
{
public:
MyDatabase();
// 获取query
QSqlQuery getQuery(int num, QDate start, QDate end);
// 获取查询语句
QString getSQLString(int num, QDate start, QDate end);
// student
QSqlQuery queryStudent(QString sql);
private:
QString dbUrl;
QString dbUser;
QString dbPass;
QSqlDatabase db_1;
// 数据库:MyData
QSqlDatabase queryMyData();
};
#endif // MYDATABASE_H
mydatabase.cpp
#include "mydatabase.h"
#include "config.h"
#include <QDebug>
MyDatabase::MyDatabase()
{
dbUrl = Config().Get("database", "dbUrl").toString();
dbUser = Config().Get("database", "dbUser").toString();
dbPass = Config().Get("database", "dbPass").toString();
db_1 = queryMyData();
}
QSqlQuery MyDatabase::getQuery(int num, QDate start, QDate end)
{
QSqlQuery query;
QString sql = getSQLString(num, start, end);
switch (num) {
case 1:
// student
query = queryStudent(sql);
break;
default: ;
}
return query;
}
// 获取SQL语句
QString MyDatabase::getSQLString(int num, QDate start, QDate end)
{
QString sql("");
sql += "SELECT " + Config().getSQLColumn(num) + " FROM " + Config().getTableName(num);
if (!start.isNull() && !end.isNull()) {
QString startStr = start.toString("yyyy-MM-dd");
QString endStr = end.toString("yyyy-MM-dd");
sql += " WHERE Date_Time between cast('" + startStr + "' as datetime) and cast('" + endStr + "' as datetime)";
}
else if (!end.isNull()) {
QString endStr = end.toString("yyyy-MM-dd");
sql += " WHERE Date_Time between cast('2000-01-01' as datetime) and cast('" + endStr + "' as datetime)";
}
else {
sql += " WHERE 1=2";
}
sql += " ORDER BY Date_Time DESC";
qDebug() << "表名:" + Config().getTableName(num);
qDebug() << "语句:" + sql;
return sql;
}
// AL_OverLimitLog
QSqlQuery MyDatabase::queryStudent(QString sql)
{
QSqlQuery query(db_1);
query.exec(sql);
return query;
}
QSqlDatabase MyDatabase::queryMyData()
{
// 拼接数据源
QString dsn = "DRIVER={SQL Server};SERVER=" + dbUrl + ";DATABASE=SystemLogData;UID=" + dbUser + ";PWD=" + dbPass + ";";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "DB_LINK_1");
db.setDatabaseName(dsn);
db.open();
return db;
}
(若有什么错误,请留言指正,3Q)