一、数据库的基本知识
二、使用步骤
首先,在项目文件pro中添加:
QT += sql
其次,添加头文件:
#include
#include
#include
#include
#include
#include
#include
#include
在这里我使用的时sqlite数据库,数据库文件时.db格式。
注意:有些sqlite数据库文件格式是.sqlite,本程序无法访问,我使用python的sqlite3库却能够访问.sqlite格式的数据库文件。但是,Linux 下文件有无后缀名没本质上的区别。具体原因尚未得知,希望有人能够解答!
DB = QSqlDatabase::addDatabase("QSQLITE");
DB.setDatabaseName("ceshi.db");
if (DB.open() == true)
{
qDebug()<<"打开数据库成功!";
query = QSqlQuery(DB);
}
else {
qDebug()<<"打开数据库失败!";
}
query.exec("DROP TABLE CESHI");
query.exec("CREATE TABLE CESHI(CESHIID INTEGER PRIMARY KEY NOT NULL,"
"CESHIName TEXT,"
"CarryOut INT,"
"CycleIndex INT,"
"CESHItime INT)");
Eq_Model = new QSqlTableModel(this, DB);
Eq_Model->setTable("CESHI");
Eq_Model->setSort(Eq_Model->fieldIndex("CESHIID"), Qt::AscendingOrder);
Eq_Model->setEditStrategy(QSqlTableModel::OnManualSubmit);
if (Eq_Model->select() == false)
qDebug()<<"打开数据表错误!";
Eq_Model->setHeaderData(Eq_Model->fieldIndex("CESHIID"), Qt::Horizontal, "ID");
Eq_Model->setHeaderData(Eq_Model->fieldIndex("CESHIName"), Qt::Horizontal, "名字");
Eq_Model->setHeaderData(Eq_Model->fieldIndex("CarryOut"), Qt::Horizontal, "XXX");
Eq_Model->setHeaderData(Eq_Model->fieldIndex("CycleIndex"), Qt::Horizontal, "YYY");
Eq_Model->setHeaderData(Eq_Model->fieldIndex("CESHItime"), Qt::Horizontal, "TTT");
首先,按照SQL语法写一段SQL语句:
“SELECT CESHIID, CESHIName, CESHItime FROM CESHI”
然后,调用query.prepare()准备SQL语句,调用query.bindValue()进行命名绑定。
最后,query.exec();执行语句。
例如:
根据CESHItime的不同,获取CESHI表不同CESHItime的同列数据。
QString SQL_SELECT = "SELECT CESHIID,CESHIName,CarryOut,CycleIndex,CESHItime FROM CESHI WHERE CESHItime=:ceshitime";
query.prepare(SQL_SELECT);
query.bindValue(":ceshitime", 2021);
query.exec();
当执行完获取数据的语句后,数据将被存query中,
首先检测语句是否执行了调用query.isActive(),然后检测query中是否存在数据,调用query.first()判断首列是否有数据,进而确定语句执行成功,数据获取成功。
最后执行query.value(“CESHIID”).toInt();获取首列的CESHIID数据。
if (query.isActive()==true)
{
if (query.first()==true)
{
query.value("CESHIID").toInt();
}
如果,执行的获取数据的语句是获取多列数据,需要遍历query来查看。
if (query.isActive()==true)
{
if (query.first()==true)
{
query.last();
order = query.at();
my_ceshilist_data = new CeShiList_data[order+1];
int number = 0;
for(int i = order; i>=0; i--)
{
query.seek(i);
ceshi_data.ceshiID = query.value("CESHIID").toInt();
ceshi_data.ceshiName = query.value("CESHIName").toString();
ceshi_data.CarryOut = query.value("CarryOut").toInt();
ceshi_data.CycleIndex = query.value("CycleIndex").toInt();
ceshi_data.CESHItime = query.value("CESHItime").toInt();
my_ceshilist_data[number] = ceshi_data;
number++;
}
}
}
注意:SQL语句一定要写对。
如有错误希望请大家指导,谢谢点赞!
希望和大家一起学习,交流
Original: https://blog.csdn.net/qq_39641107/article/details/121511457
Author: 博咯
Title: QT-数据库的使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816139/
转载文章受原作者版权保护。转载请注明原作者出处!