QT/C++绑定SQLite,增删改查,创建表等操作通用模板

实现目的

主要目的为了绑定SQLite,然后方便快捷的处理,只需要根据函数的参数进行传入,即可使用!
能够对sqlite进行快速的增删改查,并且加上信号量处理,防止同时对数据库进行操作。
主要实现,创建表,查找数据,删除表中数据,增加数据。

#ifndef DATABASE_H
#define DATABASE_H

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QMap>
#include <QInternal>
#include <QString>
#include <QDebug>
#include <QMutex>
class Sqlite
{
    
    
public:
    QSqlDatabase db;
    QString host_name;  //主机名
    QString user_name;  //用户名
    QString pwd;    //密码
    QString db_file_name;   //数据库文件名
    QSqlError error;
    QSqlQuery *query;
    QSqlRecord rec;
    public:
    Sqlite(QString m_file_name,QString m_host_name,QString m_user_name,QString m_pwd);
    ~Sqlite();
    QSqlDatabase getDatabase();
       bool create_table(QString table_name,QVector<QString> key,QVector<QString> value);   //新建表
    int get_rowCount(QString table_name);
    bool db_query(QString m_query_sql); //发送数据库语句
    bool add(QString table_name,QMap<QString,QString> data); //增加数据
    bool del(QString table_name,QMap<QString,QString> where); //删除一条记录
    bool updata(QString table_name,QMap<QString,QString> where,QMap<QString,QString> data);  //更新数据
    bool find(QString table_name,QList<QString> key,QMap<QString,QString> where,QList<QList<QString>> *row);    //查找
    bool find(QString table_name,QList<QString> key,QString WhereKey,std::map<QString,std::vector<QString>>&row);    //查找
    bool find(QString table_name,QList<QString> key,QList<QList<QString>> *row);    //查找所有
    bool IsTableExist(QString table);  //查询表是否存在
    int Get_sqlCount(QString sqlstr);
    QString getError();
    QMutex mutex;
    }#endif // DATABASE_H
#include "database.h"

Sqlite::Sqlite(QString m_file_name,QString m_host_name,QString m_user_name,QString m_pwd)
{
    
    
    host_name=m_host_name;
    user_name=m_user_name;
    pwd=m_pwd;
    db_file_name=m_file_name;
    db=QSqlDatabase::addDatabase("QSQLITE");
    query=new QSqlQuery(db);
    db.setHostName(host_name);
    db.setUserName(user_name);
    db.setPassword(pwd);
    db.setDatabaseName(db_file_name);
    if(!db.open())
    {
    
    
        //qDebug()<<"database open error.";
        error = db.lastError();
    }
}

Sqlite::~Sqlite()
{
    
    
    db.close();
}



QSqlDatabase Sqlite::getDatabase()
{
    
    
    return db;
}

/*
 *
 * create_table函数:创建数据库表
 * table_name:表名
 * table_data:表项 名->属性
 *
 */
 bool Sqlite::create_table(QString table_name,QVector<QString> key,QVector<QString> value)
{
    
    
 QMutexLocker locker(&mutex);
  QString sql="create table if not exists "+table_name+" (";
    for(int i=0;i<key.count();i++)
    {
    
    
     sql+=key[i]+' '+value[i]+',';
    }
      sql.chop(1);
    sql+=")";
    query->prepare(sql);
    return query->exec();
}

int Sqlite::get_rowCount(QString table_name)
{
    
    
    QMutexLocker locker(&mutex);
    QSqlQuery query;
    QString sql="SELECT count(*) FROM "+table_name;
    query.prepare(sql);
    if(query.exec())
    {
    
    
        query.next();
        return query.value(0).toInt();
    }
    else return 0;
}

/*
 * 向数据库中增加数据
 */
bool Sqlite::add(QString table_name, QMap<QString, QString> data)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql="insert into "+table_name+  "(";
    QString values=" values(";
    for(QMap<QString,QString>::const_iterator i=data.constBegin();i!=data.constEnd();i++)
    {
    
    
        sql+="'" + i.key() + "', ";
        values+="'" + i.value() + "', ";
    }
    sql.chop(2);
    values.chop(2);
    sql+=")";
    values+=")";
    sql+=values;
    query->prepare(sql);
    return query->exec();
}

/*
 * 向数据库发送一条语句
 */
 bool Sqlite::db_query(QString m_query_sql)
{
    
    
    QMutexLocker locker(&mutex);
    query->prepare(m_query_sql);
    return query->exec();
}

/*
 * 删除一条记录
 */
bool Sqlite::del(QString table_name, QMap<QString, QString> where)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql="delete ";
    sql+=table_name;
    sql+=" where ";
    for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
    {
    
    
        sql+=i.key()+"=";
        sql+="'"+i.value()+"' ";
    }
    sql.chop(2);
    query->prepare(sql);
    return query->exec();
}

/*
 * 修改数据库记录
 */
bool Sqlite::updata(QString table_name, QMap<QString, QString> where, QMap<QString, QString> data)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql="updata "+table_name+" set";
    for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
    {
    
    
        sql+=i.key()+"=";
        sql+=i.value()+" ";
    }
    sql+="where ";
    for(QMap<QString,QString>::const_iterator i=data.constBegin();i!=data.constEnd();i++)
    {
    
    
        sql+=i.key()+"=";
        sql+=i.value()+" ";
    }
    return query->exec();
}

/*
 * 查找所有记录
 */
bool Sqlite::find(QString table_name,QList<QString> key,QList<QList<QString>> *row)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql="select ";
    int len=key.size();
    for(int i=0;i<len;i++)
    {
    
    
        sql+=key.at(i);
        sql+=",";
    }
    sql.chop(1);
    sql+=" from "+table_name;
    //qDebug()<<sql;
    query->prepare(sql);
    if(query->exec())
    {
    
    
        while (query->next()) {
    
    
            QList<QString> j;
            for(int i=0;i<len;i++)
            {
    
    
                j.append(query->value(i).toString());
            }
            row->append(j);
        }
        return 1;
    }
    else return 0;
}

bool Sqlite::IsTableExist(QString table)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql = QString("select count(*) from sqlite_master where type = 'table' name = '%1'").arg(table);
    if(db.tables().contains(table))
    {
    
    
        return true;
    }
  return false;
 }

int Sqlite::Get_sqlCount(QString sqlstr)
{
    
    
    QMutexLocker locker(&mutex);
    query->prepare(sqlstr);
    if(query->exec())
    {
    
    
        query->next();
        return query->value(0).toInt();
    }
    else return 0;
}


bool Sqlite::find(QString table_name, QList<QString> key, QMap<QString, QString> where, QList<QList<QString> > *row)
{
    
    
    QMutexLocker locker(&mutex);
    QString sql="select ";
    int len=key.size();
    for(int i=0;i<len;i++)
    {
    
    
        sql+=key.at(i);
        sql+=",";
    }
    sql.chop(1);
    sql+=" from "+table_name;
    if (where.count())
    {
    
    
        sql+=" where ";
        for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
        {
    
    
            sql+=i.key()+"="+i.value()+",";
        }
        sql.chop(1);
    }
    //qDebug()<<sql;
    query->prepare(sql);
    if(query->exec())
    {
    
    
        while (query->next()) {
    
    
            QList<QString> j;
            for(int i=0;i<len;i++)
            {
    
    
                j.append(query->value(i).toString());
            }
            row->append(j);
        }
        return 1;
    }
    else return 0;
}



bool Sqlite::find(QString table_name, QList<QString> key, QString WhereKey, std::map<QString, std::vector<QString>> &row)
{
    
    
  QMutexLocker locker(&mutex);
    QString sql="select ";
    int len=key.size();
    for(int i=0;i<len;i++)
    {
    
    
        sql+=key.at(i);
        sql+=",";
    }
    sql.chop(1);
    sql+=" from "+table_name;
    sql+=" where "+WhereKey;
    query->prepare(sql);
    if(query->exec())
    {
    
    
        while (query->next()) 
        {
    
    
            QList<QString> j;
             for(int i=0;i<len;i++)
            {
    
    
                row[key.at(i)].push_back(query->value(i).toString());
            }
         }
           }
        return 1;
    }
    else return 0;
}

/*
 * 获取错误信息
 */
 QString Sqlite::getError()
{
    
    
    return error.text();
}

猜你喜欢

转载自blog.csdn.net/amxld/article/details/108760261