当前位置:网站首页>Qt使用SQLITE数据库
Qt使用SQLITE数据库
2022-06-25 17:38:00 【欧特克_Glodon】
1、初始化
void Widget::InitialSQLiteDb()
{
QSqlDatabase m_dbSystemData ;
// 检测已连接的方式 - 默认连接名
// QSqlDatabase::contains(QSqlDatabase::defaultConnection)
// if(QSqlDatabase::contains("qt_sql_default_connection"))
// {
// db = QSqlDatabase::database("qt_sql_default_connection");
// }
// else
// {
// db = QSqlDatabase::addDatabase("QSQLITE");
// }
//检测已连接的方式 - 自定义连接名
if(QSqlDatabase::contains("mysql_connection"))
{
m_dbSystemData = QSqlDatabase::database("mysql_connection");
}
else
{
m_dbSystemData = QSqlDatabase::addDatabase("QSQLITE","mysql_connection");
}
//设置数据库路径,不存在则创建
m_dbSystemData.setDatabaseName("mySysData.db");
//db.setUserName();
//打开数据库
if(!m_dbSystemData.open())
{
qDebug()<<"create sqldb failed!";
return;
}
//关闭数据库
m_dbSystemData.close();
}
2、创建表格
void Widget::CreateTable()
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return;
}
//如果不存在则创建my_table表 id自增,name唯一
const QString sql=R"( CREATE TABLE IF NOT EXISTS my_table ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, code INTEGER, name CHAR (50) UNIQUE NOT NULL, age INTEGER, sex INTEGER, score INTEGER, rank INTEGER, address CHAR (50) );)";
//QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
QSqlQuery query(m_dbSystemData);
if(query.exec(sql))
{
qDebug()<<"create table success!";
}
else
{
//打印sql语句错误信息
qDebug()<<"create table error!"<< query.lastError();
}
}
3、插入数据
void Widget::insertRecord(const QString &name, const QString address, int code, int age, int sex, int score, int rank)
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return;
}
qDebug()<<"2222!";
QSqlQuery query(m_dbSystemData);
//方式一,直接执行SQL语句
query.exec(QString(R"(INSERT INTO my_table(code,name,age,sex,score,rank,address) VALUES(%1,'%2',%3,%4,%5,%6,'%7');)")
.arg(code).arg(name).arg(age).arg(sex).arg(score).arg(rank).arg(address));
//方式二,绑定值,待定变量默认用问号占位,注意字符串也没有引号
/*query.prepare(R"(INSERT INTO my_table(name,age) VALUES(?,?);)"); query.addBindValue(name); query.addBindValue(age); query.exec();*/
}
4、删除数据
void Widget::deleteRecord(const QString &name)
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return;
}
QSqlQuery query(m_dbSystemData);
//方式一,直接执行SQL语句
query.exec(QString(R"(DELETE FROM my_table WHERE name='%1';)").arg(name));
//方式二,绑定值,待定变量默认用问号占位
/*query.prepare(R"(DELETE FROM my_table WHERE name=?;)"); query.addBindValue(name); query.exec();*/
}
5、更新数据
void Widget::updateRecord(const QString &name, int age)
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return;
}
QSqlQuery query(m_dbSystemData);
//方式一,直接执行SQL语句
query.exec(QString(R"(UPDATE my_table SET age=%2 WHERE name='%1';)")
.arg(name).arg(age));
//方式二,绑定值,待定变量默认问号,可自定义
/*query.prepare(R"(UPDATE my_table SET age=:age WHERE name=:name;)"); query.bindValue(":name",name);//通过自定义的别名来替代 query.bindValue(":age",age); query.exec();*/
}
6、查询数据
int Widget::searchRecord(const QString &name)
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return -1;
}
QSqlQuery query(m_dbSystemData);
query.exec(QString(R"(SELECT age FROM my_table WHERE name='%1';)").arg(name));
//获取查询结果的第0个值,
//如果结果是多行数据,可用while(query.next()){}遍历每一行
int ageValue=-1;
if(query.next())
{
ageValue = query.value(0).toInt();
}
qDebug()<<"age value is: "<< ageValue;
return ageValue;
}
7、初始化表格数据
void Widget::InitialQTable()
{
if(!m_dbSystemData.isOpen())
{
qDebug()<<"db is not open!";
return;
}
ui->tableWidget->setColumnCount(7);
//ui->tableWidget->setRowCount(10);
ui->tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式
QStringList header;
header<<"学号"<<"姓名"<<"年龄"<<"性别"<<"总分"<<"排名"<<"地址";
ui->tableWidget->setHorizontalHeaderLabels(header);
QSqlQuery query(m_dbSystemData);
query.exec("SELECT * FROM my_table");
//如果结果是多行数据,可用while(query.next()){}遍历每一行
int nRow = 0;
while(query.next())
{
int iRow = ui->tableWidget->rowCount();
ui->tableWidget->setRowCount(iRow + 1);
int id = query.value(0).toInt();
QString code = query.value(1).toString();
QString name = query.value(2).toString();
QString age = query.value(3).toString();
int nSex = query.value(4).toInt();
QString sex;
if(nSex == 0)
{
sex = "男";
}
else
{
sex = "女";
}
QString score = query.value(5).toString();
QString rank = query.value(6).toString();
QString address = query.value(7).toString();
qDebug()<< id << code << name << age << sex << score << rank;
ui->tableWidget->setItem(nRow,0,new QTableWidgetItem(code));
ui->tableWidget->setItem(nRow,1,new QTableWidgetItem(name));
ui->tableWidget->setItem(nRow,2,new QTableWidgetItem(age));
ui->tableWidget->setItem(nRow,3,new QTableWidgetItem(sex));
ui->tableWidget->setItem(nRow,4,new QTableWidgetItem(score));
ui->tableWidget->setItem(nRow,5,new QTableWidgetItem(rank));
ui->tableWidget->setItem(nRow,6,new QTableWidgetItem(address));
nRow++;
}
ui->tableWidget->show();
}
边栏推荐
- golang sort slice int
- Why do we need ankeri's active power filter in frequency converter occasions?
- Idea global search for Chinese characters [easy to understand]
- How to solve the problem of network disconnection after enabling hotspot sharing in win10?
- [UVM practice== > episode_1] ~ MCDF design update, AMBA standard interface, UVM verification environment update
- 沁恒CH583 USB 自定义HID调试记录
- Sentinel哨兵机制
- 汇编语言(6)使用JCC指令构造分支与循环
- Assembly language (6) uses JCC instructions to construct branches and loops
- Use of jupyter
猜你喜欢
![Jerry's system clock setting is reset or invalid [chapter]](/img/c6/ee6b287af7d309f98abda8e11d674c.png)
Jerry's system clock setting is reset or invalid [chapter]

【工作小技巧】刚入职的软件测试工程师怎么快速上手新岗位

什么是算子?
![Jerry's addition of encrypted file playback function [chapter]](/img/d0/b7a0c9030c157f282405129be51efe.png)
Jerry's addition of encrypted file playback function [chapter]

杰理之获取复位源和唤醒的 IO 口的方法【篇】

近来开发的一款简单易用的图可视化工具

Distinguishing seven kinds of facial expressions by deep separable convolution neural network

使用DiskGenius拓展系統盤C盤的容量

Bilstm and CRF

How does LSF see whether the job reserved slot is reasonable?
随机推荐
Unity technical manual - size over lifetime and size by speed
Utilisation de diskgenius pour augmenter la capacité du disque système C
Huawei cloud gaussdb (for redis) unveiling issue 19: gaussdb (for redis) comprehensive comparison with CODIS
How to solve the problem of network disconnection after enabling hotspot sharing in win10?
Sentinel sentinel mechanism
汇编语言(6)使用JCC指令构造分支与循环
New characteristics of cultural consumption in the era of digital economy
杰理之如何给外界输出一个时钟源使用【篇】
BILSTM和CRF的那些事
Intelligent dialog 01 redis installation
Precautions for the use of Jerry's wake-up mouth [chapter]
golang sort slice int
[matlab] data interpolation
[matlab] numerical calculus and equation solving
怎么判断自己是否适合转行软件测试
配电室环境的分布式远程管理
杰理之定时器使用注意事项【篇】
【Matlab】数值微积分与方程求解
win10安装cuda的操作步骤(不断完美中)
Mobx学习之路----强大的“状态管理工具”