qt 自己写的sqlite数据库调用类

有需要的可以拿去改改就能用
头文件

#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;
}

猜你喜欢

转载自blog.csdn.net/Fengfgg/article/details/113353932