有需要的可以拿去改改就能用
头文件
#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QString>
#include <QSqlQuery>
#include <QMap>
#include <QVector>
#include <QtCore/qglobal.h>
typedef struct
{
QString proName;
QString num;
QString type;
QString note;
}measureInfo;
#pragma execution_character_set("utf-8")//连接中文
class DataBase
{
private:
QSqlDatabase db;
QSqlQuery query;
//建立数据库连接
void connectSql(QString dbName);
void connectSql(QString dbName,QString usrName,QString passWord,QString connectName="qt_sql_default_connection",QString sqlType="QSQLITE");
//打开数据库
bool dbOpen(void);
//通过sql语句操作数据库
bool createTable(QString tableName,QString values);
bool insertData(QString tableName,QString values);
bool deletData(QString tableName,QString values);
bool addColumn(QString tableName,QString values);
bool update(QString tableName,QString value1,QString value2);
QString queryData(QString tableName,QString values,int num);
public:
//以下都是表的接口
explicit DataBase(QString base);
~DataBase();
//用sql语句
bool opBySql(QString sqlExe);
//recentPro
void recentProAdd(QString proName,QString proNum);
bool recentProGet(QVector<QString> &inf);
//recentFile
void recentFileAdd(QString mainPro,QString proName,QString proNum,QString fileName);
bool recentFileGet(QVector<QString> &inf);
//usrInfo
bool usrInfoAdd(QString usrName,QString passW);
void usrInfoGet(QString usrName,QString &passW);
bool usrInfoDel(QString usrName);
bool usrInfoChange(QString usrName,QString passW);
//supportInfo
bool supportInfoAdd(QString name,QString phone,QString addr,QString email,QString qqnum);
void supportInfoGet(QString name,QString &phone,QString &addr,QString &email,QString &qqnum);
bool supportInfoChange(QString name,QString key,QString value);
//holePro
bool holeProAdd(QString proName,QString holeDia,QString holeDeep);
void holeProGet(QString proName,QString &dia,QString &deep);
bool holeProChangeDiam(QString proName,QString dia);
bool holeProChangeDepth(QString proName,QString deep);
//recordInfo
bool recordInfoAdd(QString proName,QString num);
//snapRecInfo
bool snapRecInfoAdd(QString proName,QString num,QString photoName);
//measureInfo
bool measureInfoAdd(QString proName,QString num,QString type,QString note);
void measureInfoGet(QVector<measureInfo>&inf);
bool measureInfoDel(QString proName,QString type,QString note);
};
.cpp
#include "database.h"
#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QString>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
#include <iostream>
#include <QTextCodec>
#include <QVector>
DataBase::DataBase(QString base)
{
connectSql(base);
dbOpen();
}
DataBase::~DataBase()
{
db.close();
}
void DataBase::connectSql(QString dbName)
{
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
qDebug()<<"connect already exists";
db = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
qDebug()<<"Success connect";
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbName);
}
query=QSqlQuery(db);
}
void DataBase::connectSql(QString dbName,QString usrName,QString passWord,QString connectName,QString sqlType)
{
if (QSqlDatabase::contains(connectName))
{
qDebug()<<"connect already exists";
db = QSqlDatabase::database(connectName);
}
else
{
db = QSqlDatabase::addDatabase(sqlType,connectName);
db.setDatabaseName(dbName);
db.setUserName(usrName);
db.setPassword(passWord);
}
query=QSqlQuery(db);
}
bool DataBase::dbOpen(void)
{
if(!db.open())
{
qDebug() << "Error: Failed to open database." << db.lastError();
return false;
}
else
{
qDebug()<<"successed to open database";
return true;
}
}
bool DataBase::opBySql(QString sqlExe)
{
query.prepare(sqlExe);
if(!query.exec())
{
qDebug()<<"Fail to execute"<<query.lastError();
return false;
}
else
{
qDebug()<<"Success to execute";
return true;
}
}
bool DataBase::createTable(QString tableName,QString values)
{
query.exec("select * from "+tableName);
if(!query.next())
{
bool ok=query.exec("create table "+tableName+' '+values);
if(ok)
{
qDebug()<<"table create successed";
return true;
}
else
{
qDebug()<<"table create failed"<<query.lastError();
return false;
}
}
else
{
qDebug()<<"table is exists";
return false;
}
}
bool DataBase::insertData(QString tableName,QString values)
{
bool ok=query.exec("insert into "+tableName+" values"+values);
if(ok)
{
qDebug()<<"data insert successed";
return true;
}
else
{
qDebug()<<"data insert failed"<<query.lastError();
return false;
}
}
bool DataBase::deletData(QString tableName,QString values)
{
bool ok=query.exec("delete from "+tableName+" where "+values);
if(ok)
{
qDebug()<<"data delete successed";
return true;
}
else
{
qDebug()<<"data delete failed"<<query.lastError();
return false;
}
}
bool DataBase::addColumn(QString tableName,QString values)
{
bool ok=query.exec("alter table "+tableName+" add column "+values);
if(ok)
{
qDebug()<<"column add successed";
return true;
}
else
{
qDebug()<<"column add failed"<<query.lastError();
return false;
}
}
bool DataBase::update(QString tableName,QString value1,QString value2)
{
bool ok=query.exec("update "+tableName+" set "+value1+" where "+value2);
if(ok)
{
qDebug()<<"data update successed";
return true;
}
else
{
qDebug()<<"data update failed"<<query.lastError();
return false;
}
}
QString DataBase::queryData(QString tableName,QString values,int num)
{
query.exec("select * from "+tableName+" where "+values);
query.next();
return query.value(num).toString();
}
void DataBase::recentProAdd(QString proName, QString proNum)
{
opBySql("select * from recentPro where 项目名='"+proName+"' and 项目编号='"+proNum+"'");
query.next();
if(proName==query.value(0) && proNum==query.value(1))
{
update("recentPro","时间=strftime('%Y-%m-%d %H:%M:%f','now','localtime')","项目名='"+proName+"' and 项目编号='"+proNum+"'");
}
else
{
int count=0;
query.exec("SELECT * FROM recentPro");
while(query.next())
{
++count;
}
if(count>=10)
{
opBySql("delete from recentPro where 时间 in (select 时间 from recentPro order by 时间 limit 0,1)");
}
insertData("recentPro","('"+proName+"','"+proNum+"',strftime('%Y-%m-%d %H:%M:%f','now','localtime'))");
}
}
bool DataBase::recentProGet(QVector<QString> &inf)
{
QVector<QString> res;
if(opBySql("select * from recentPro order by 时间 desc"))
{
while(query.next())
{
res<<query.value(0).toString()+"#"+query.value(1).toString();
qDebug() << "sql :" << query.value(0).toString() + "#" + query.value(1).toString() << endl;
}
inf=res;
return true;
}
return false;
}
void DataBase::recentFileAdd(QString mainPro,QString proName, QString proNum, QString fileName)
{
if (mainPro == "mainProject")
{
int index = fileName.lastIndexOf("/");
QString path = fileName.mid(0, index - 1);
recentProAdd(proName, path);
}
opBySql("select * from recentFile where 项目名='"+proName+"' and 项目编号='"+proNum+"' and 文件名='"+fileName+"'");
query.next();
if(proName==query.value(0) && proNum==query.value(1) && fileName==query.value(2))
{
update("recentFile","时间=strftime('%Y-%m-%d %H:%M:%f','now','localtime')","项目名='"+proName+"' and 项目编号='"+proNum+"' and 文件名='"+fileName+"'");
}
else
{
int count=0;
query.exec("SELECT * FROM recentFile");
while(query.next())
{
++count;
}
if(count>=10)
{
opBySql("delete from recentFile where 时间 in (select 时间 from recentFile order by 时间 limit 0,1)");
}
insertData("recentFile","('"+proName+"','"+proNum+"','"+fileName+"',strftime('%Y-%m-%d %H:%M:%f','now','localtime'))");
}
}
bool DataBase::recentFileGet(QVector<QString> &inf)
{
QVector<QString> res;
QString tmp;
if(opBySql("select * from recentFile order by 时间 desc"))
{
while(query.next())
{
tmp=query.value(0).toString()+"/"+query.value(1).toString()+"#"+query.value(2).toString();
res<<tmp;
qDebug() << "tmp:" << tmp << endl;
}
inf=res;
return true;
}
return false;
}
bool DataBase::usrInfoAdd(QString usrName, QString passW)
{
if(insertData("usrInfo","('"+usrName+"','"+passW+"',strftime('%Y-%m-%d %H:%M:%f','now','localtime'))"))
{
return true;
}
return false;
}
void DataBase::usrInfoGet(QString usrName,QString &passW)
{
passW=queryData("usrInfo","用户名='"+usrName+"'",1);
}
bool DataBase::usrInfoDel(QString usrName)
{
if(deletData("usrInfo","用户名='"+usrName+"'"))
{
return true;
}
return false;
}
bool DataBase::usrInfoChange(QString usrName, QString passW)
{
if(update("usrInfo","用户密码='"+passW+"'","用户名='"+usrName+"'"))
{
return true;
}
return false;
}
bool DataBase::supportInfoAdd(QString name, QString phone, QString addr, QString email, QString qqnum)
{
if(insertData("supportInfo","('"+name+"','"+phone+"','"+addr+"','"+email+"','"+qqnum+"')"))
{
return true;
}
return false;
}
void DataBase::supportInfoGet(QString name,QString &phone,QString &addr,QString &email,QString &qqnum)
{
phone=queryData("supportInfo","联系人='"+name+"'",1);
addr=queryData("supportInfo","联系人='"+name+"'",2);
email=queryData("supportInfo","联系人='"+name+"'",3);
qqnum=queryData("supportInfo","联系人='"+name+"'",4);
}
bool DataBase::supportInfoChange(QString name, QString key, QString value)
{
if(update("supportInfo",key+"='"+value+"'","联系人='"+name+"'"))
{
return true;
}
return false;
}
bool DataBase::holeProAdd(QString proName, QString holeDia,QString holeDeep)
{
if(insertData("holePro","('"+proName+"',"+holeDia+","+holeDeep+",strftime('%Y-%m-%d %H:%M:%f','now','localtime'))"))
{
return true;
}
return false;
}
void DataBase::holeProGet(QString proName, QString &dia,QString &deep)
{
dia=queryData("holePro","项目名='"+proName+"'",1);
deep=queryData("holePro","项目名='"+proName+"'",2);
}
bool DataBase::holeProChangeDiam(QString proName, QString dia)
{
if(update("holePro","钻孔直径="+dia,"项目名='"+proName+"'"))
{
return true;
}
return false;
}
bool DataBase::holeProChangeDepth(QString proName, QString deep)
{
if(update("holePro","钻孔深度="+deep,"项目名='"+proName+"'"))
{
return true;
}
return false;
}
bool DataBase::recordInfoAdd(QString proName, QString num)
{
if(insertData("recordInfo","('"+proName+"','"+num+"',strftime('%Y-%m-%d %H:%M:%f','now','localtime'))"))
{
return true;
}
return false;
}
bool DataBase::snapRecInfoAdd(QString proName, QString num, QString photoName)
{
if(insertData("snapRecInfo","('"+proName+"','"+num+"','"+photoName+"')"))
{
return true;
}
return false;
}
bool DataBase::measureInfoAdd(QString proName, QString num, QString type, QString note)
{
if(insertData("measureInfo","('"+proName+"','"+num+"',"+type+",'"+note+"')"))
{
return true;
}
return false;
}
void DataBase::measureInfoGet(QVector<measureInfo>&inf)
{
QVector<measureInfo>res;
measureInfo tmp;
opBySql("select * from measureInfo");
while(query.next())
{
tmp.proName=query.value(0).toString();
tmp.num=query.value(1).toString();
tmp.type=query.value(2).toString();
tmp.note=query.value(3).toString();
res<<tmp;
}
inf=res;
}
bool DataBase::measureInfoDel(QString proName,QString type,QString note)
{
opBySql("select * from measureInfo where 项目名='"+proName+"'");
query.next();
if(query.value(2).toString()==type && query.value(3).toString()==note)
{
deletData("measureInfo","项目名='"+proName+"'");
return true;
}
return false;
}