Qt下Sqlite数据库的操作(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39568531/article/details/79308170

    Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样)。关于Sqlite和Qt的千丝万缕的故事,有机会再说(各位看官查一查也可以自己search一下)。这里简单说说Sqlite数据库的用法吧。

一、sql语句和部分接口函数

1、在.pro文件中记得增加 :

QT       += core gui sql
 

2、sqlite数据库的增删查改【接口函数参见代码】

#ifndef SQLITEDBAOPERATOR_H
#define SQLITEDBAOPERATOR_H
#include"generalheaders.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QDebug>
#include <QSqlError>
class SqliteDBAOperator
{
public:
    SqliteDBAOperator();
    ~SqliteDBAOperator();
public:
    //创建数据库并建立连接
    bool OpenDb(void);
    //创建数据表(student)
    void createTable(void);
    //在表格中增加新的字段
    void addNewcolumn(QString &columnNameAndproperty);
    //查询和显示结果
    void queryTable(QString& str);
    //判断数据表是否存在
    bool IsTaBexists(QString& Tabname);
    //插入数据
    void singleinsertdata(w2dba &singledb);//插入单条数据
    void Moreinsertdata(QList<w2dba> &moredb);//插入多条数据
    //删除数据
    void deletedata();
    //修改数据
    void updatedata();
    //关闭数据库
    void closeDb(void);
private:
    QSqlDatabase db;//用于建立和数据库的连接
};

#endif // SQLITEDBAOPERATOR_H

这里w2dba 是自己定义的一个结构体类型的数据。各位可以根据自己实际需要修改。 因为c++开发面向对象的思想,所以我个人通常是在确定一个对象后,再思考这个对象的衣食住行、拉屎放屁、能够公开交流的、或者只能私有的都有哪些东西,接着根据这个对象的应有的特点,编写对应的函数尽量让这个对象鲜活饱满,但是春光不会外泄出来(==》纯属小弟个人微不足道的理解,不喜勿喷。更多精彩画面,自行脑补)。

/*Sqlite数据库操作*/

#include "sqlitedbaoperator.h"
#include"generalheaders.h"
/*构造函数中初始化数据库对象,并创建连接*/
SqliteDBAOperator::SqliteDBAOperator()
{
    QSqlDatabase database;
    if (QSqlDatabase::contains("qt_sql_default_connection"))
    {
        database = QSqlDatabase::database("qt_sql_default_connection");
    }
    else
    {
        //建立和sqlite数据的连接
        db = QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库文件的名字
        QString dbname = QDir::currentPath() +QString("/")+ QString("MACAddrs.db");
        db.setDatabaseName(dbname);
    }
}
 
/*析构函数关闭数据库连接*/
SqliteDBAOperator::~SqliteDBAOperator()
{
    db.close();
}

//打开数据库
bool SqliteDBAOperator::OpenDb(void)
{
    //打开数据库
    if(db.open() == false){
        qDebug() << "连接数据失败!";
        return false;
    }
    qDebug() << "连接数据库成功";
    return true;
}

//判断数据库中某个数据表是否存在
bool SqliteDBAOperator::IsTaBexists(QString& Tabname)
{
    QSqlDatabase db = QSqlDatabase::database();
    if(db.tables().contains(Tabname))
    {
        return true;
    }
    return false;
}


//创建数据表
void SqliteDBAOperator::createTable(void)
{
    //用于执行sql语句的对象
    QSqlQuery query;
    //构建创建数据库的sql语句字符串
    QString str = QString("CREATE TABLE MACAddrs (\
                          ID INT PRIMARY KEY NOT NULL,\
                          Type TEXT NOT NULL,\
                          ProduceTime TEXT NOT NULL)");
    //执行sql语句
    query.exec(str);
}

void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)
{
}

//查询和显示结果
void SqliteDBAOperator::queryTable(QString& str)
{
    QSqlQuery query;
    //构建创建数据库的sql语句字符串
    str = QString("SELECT ID,Type,MACADDR FROM MACAddrs");
    //执行sql语句,并将结果集保存到model
    query.exec(str);
}


//单条插入
void SqliteDBAOperator::singleinsertdata(w2dba &singledb)
{
    QSqlQuery query;
    query.prepare("INSERT INTO MACAddrs VALUES (:ID,:Type,:ProduceTime)");
    query.bindValue(":ID", singledb.id);
    query.bindValue(":Type", singledb.type);
    query.bindValue(":ProduceTime",singledb.prodceTime);
    query.exec();
}

//多条插入
void SqliteDBAOperator::Moreinsertdata(QList<w2dba>& moredb)
{
    QSqlQuery query;
    query.prepare("insert into MACAddrs values (?,?,?,?,?,?,?,?)");
    QVariantList idlist,snlist,typelist,MACAddrlsit,produceTimelist,Pieceslist,Operatorlist,OperateStatlist;
    for(int i=0; i< moredb.size(); i++)
    {
        idlist <<  moredb.at(i).id;
        typelist << moredb.at(i).type;
        produceTimelist << moredb.at(i).prodceTime;
    }
    query.addBindValue(idlist);
    query.addBindValue(MACAddrlsit);
    query.addBindValue(produceTimelist);

    if (!query.execBatch())
    {
        qDebug() << query.lastError();
    }
}


//删除一条数据
void SqliteDBAOperator::deletedata()
{
    //比较简单,自行补充
}
//修改
void SqliteDBAOperator::updatedata()
{
    //比较简单,自行补充

}


void SqliteDBAOperator::closeDb(void)
{
    db.close();
}

这部分可能稍微有点意思的就是带参SQL语句的编写,在数据的单条插入和多条插入中,使用了两种不同的方法,各位可以自行查看。

二、接口函数的检测

1、windows下sqlite数据库的安装:

   (1) 前往www.sqlite.org.com下载相应的数据库文件,然后在创建路径并在 c:\sqilte3 路径下将文件解压(路径可自己定义);

(2)设置环境变量,将数据库路的路径增加到PATH变量下。

(3)环境配置完成,重启电脑,配置生效。

(4)数据库操作

    1>创建或打开数据库

通过cd 命令到.db数据库文件所在的目录下,如果没有文件自己创建一个。

这里在C盘的根目录下创建一个test.db的数据库文件

敲击回车后进入sqlite数据库,显示如下:

(2)前面简单的数据库基本配置工作已经完成,现在开始数据库的操作部分

首先,我们要创建一张数据表:

sql语句:

CREATE TABLE MACAddrs ( ID INT PRIMARY KEY NOT NULL,Type TEXT NOT NULL,ProduceTime TEXT );

查看表格是否创建成功 以及表头内容:

.tables

.schema

接下来就是数据库的增删查改操作了.........(基本操作另起一文吧,各位有兴趣的请看下文)。

猜你喜欢

转载自blog.csdn.net/weixin_39568531/article/details/79308170