当前位置: 代码迷 >> 综合 >> QT读写Sqlite
  详细解决方案

QT读写Sqlite

热度:12   发布时间:2024-02-26 11:44:36.0

在.pro文件中添加QT += sql
执行qmake
QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据是相当的方便,Qt本身已经自带了Sqlite的驱动,直接使用相关的类库即可,这篇我们主要来说明QT访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。

1、首先使用QSqlQuery来访问
我们先要在工程中包含与数据库相关的几个头文件

#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>
typedef struct _testInfo //假定数据库存储内容
{QString UsreName;QString IP;QString Port;QString PassWord;QString Type;
}testInfo;
int main(int argc, char *argv[])
{QApplication a(argc, argv);QVector<testInfo> infoVect; //testInfo向量,用于存储数据库查询到的数据QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");if (!db.open()){return 0;}
/**************************使用QSqlQuery操作数据库**************************/QSqlQuery query;    //执行操作类对象//查询数据query.prepare("SELECT * FROM T_USER_MANAGE");query.exec();   //执行QSqlRecord recode = query.record();     //recode保存查询到一些内容信息,如表头、列数等等int column = recode.count();            //获取读取结果的列数 QString s1 = recode.fieldName(0);       //获取第0列的列名while (query.next()){testInfo tmp;tmp.UsreName = query.value("UsreName").toString();tmp.IP = query.value("IP").toString();tmp.Port = query.value("Port").toString();tmp.PassWord = query.value("PassWord").toString();tmp.Type = query.value("Type").toString();infoVect.push_back(tmp);   //将查询到的内容存到testInfo向量中}for (int i=0; i<infoVect.size(); i++)    //打印输出{qDebug() << infoVect[i].UsreName << ":" \<< infoVect[i].IP << ":"       \<< infoVect[i].Port << ":"     \<< infoVect[i].PassWord << ":" \<< infoVect[i].Type;}//插入数据query.prepare("INSERT INTO T_USER_MANAGE (UsreName, IP, Port, PassWord, Type) VALUES (:UsreName, :IP, :Port, :PassWord, :Type)");query.bindValue(":UserName", "user4");  //给每个插入值标识符设定具体值query.bindValue(":IP", "192.168.1.5");query.bindValue(":Port", "5004");query.bindValue(":PassWord", "55555");query.bindValue(":Type", "operator");query.exec();   //更改表中 UserName=user4 的Type属性为adminquery.prepare("UPDATE T_USER_MANAGE SET Type='admin' WHERE UserName='user4'");query.exec();//删除表中 UserName=user4的用户信息query.prepare("DELETE FROM T_USER_MANAGE WHERE UserName='user4'");query.exec();query.clear();
/**************************使用QSqlQuery操作数据库END***********************/
return 0;
}

使用QSqlQueryModel来访问
QSqlQueryModel类带有Model字样,相信你已经猜到我们可以用他来关联试图,就能把数据库的内容显示到视图上,当然,常规的操作也是可以的,但是我们只说说怎么用这个类来把数据库中的内容显示到是视图中,这里我们选择的视图类为QTableView,直接上代码吧

#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <QTableView>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>
int main(int argc, char *argv[])
{QApplication a(argc, argv);QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");if (!db.open()){return 0;}QSqlQueryModel *model = new QSqlQueryModel;model->setQuery("SELECT * FROM T_USER_MANAGE", db); //从给定的数据库db执行sql操作, db需预先制定并打开int column = model->columnCount();  //获取列数int row = model->rowCount();        //获取行数model->setHeaderData(0, Qt::Horizontal, QStringLiteral("用户名")); //设置表头,如不设置则使用数据库中的默认表头model->setHeaderData(1, Qt::Horizontal, QStringLiteral("IP地址"));model->setHeaderData(2, Qt::Horizontal, QStringLiteral("端口"));model->setHeaderData(3, Qt::Horizontal, QStringLiteral("密码"));model->setHeaderData(4, Qt::Horizontal, QStringLiteral("用户类型"));QTableView *view = new QTableView;  //定义视图,只能用于显示,不能修改数据库view->setFixedSize(500, 200);view->setModel(model);view->show();return a.exec();
}

 

  相关解决方案