QTSQL数据库:QSqlQuery查询、查询模型QSqlQueryModel、表格模型QSqlTableModel、关系表格模型QSqlRelationalTableModel
b.编辑mainwindow.ui文件添加滑动spinBox。1.5 编辑mainwindow.cpp文件编写槽函数。3.1 编辑mainwindow.cpp文件编写槽函数。c.编辑mainwindow.cpp文件编写槽函数。b.编辑mainwindow.cpp文件编写槽函数。a.编辑mainwindow.cpp文件编写槽函数。1.3 编辑main.cpp文件调用连接函数。第一种:在sql语句中使
·
文章目录:
1.2 数据库连接单独放在一个新建头文件connection.h中配置数据库
b.编辑mainwindow.ui文件添加滑动spinBox
四:QT的SQL关系表格模型QSqlRelationalTableModel
一:QSqlQuery查询类
1.QT查询数据库
1.1 目录结构
1.2 数据库连接单独放在一个新建头文件connection.h中配置数据库
#ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlQuery> static bool createConnection() { // 配置数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //数据库名memory 建立在内存中的数据库 该数据库只在程序运行期间有效 db.setDatabaseName(":memory:"); //数据库连接测试 if (!db.open()) { QMessageBox::critical(0, qApp->tr("不能打开数据库"), qApp->tr("无法建立数据库连接" ), QMessageBox::Cancel); return false; } //数据库操作 QSqlQuery query; query.exec("create table student (id int primary key, " "name varchar(20))"); query.exec("insert into student values(0, 'first')"); query.exec("insert into student values(1, 'second')"); query.exec("insert into student values(2, 'third')"); query.exec("insert into student values(3, 'fourth')"); query.exec("insert into student values(4, 'fifth')"); return true; } #endif // CONNECTION_H
1.3 编辑main.cpp文件调用连接函数
#include "mainwindow.h" #include <QApplication> #include "connection.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); //调用连接函数 if (!createConnection()) return 1; MainWindow w; w.show(); return a.exec(); }
1.4 编辑mainwindow.ui文件添加按钮
1.5 编辑mainwindow.cpp文件编写槽函数
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> #include <QSqlQuery> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //双击mainwindow.ui文件进入设计模式,按钮转到槽,然后选择clicked()单击信号槽 void MainWindow::on_pushButton_clicked() { QSqlQuery query; query.exec("select * from student"); while(query.next()) { qDebug() << query.value(0).toInt() << query.value(1).toString(); } }
1.6 运行结果
2.QT数据库数据绑定
第一种:在sql语句中使用占位符变量实现
a.目录结构
和上面一样
b.编辑mainwindow.ui文件添加滑动spinBox
c.编辑mainwindow.cpp文件编写槽函数
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> #include <QSqlQuery> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //双击mainwindow.ui文件进入设计模式,按钮转到槽,然后选择clicked()单击信号槽 void MainWindow::on_pushButton_clicked() { QSqlQuery query; int id = ui->spinBox->value(); //在sql语句中使用变量 //数据绑定:通过改变滑动数字,利用按钮点击查询数据库对应值 query.exec(QString("select name from student where id =%1") .arg(id)); query.next(); QString name = query.value(0).toString(); qDebug() << name; } void MainWindow::on_spinBox_textChanged(const QString &arg1) { }
d.运行结果
QSqlQuery类绑定函数
a.目录结构
和上面一样
b.编辑mainwindow.cpp文件编写槽函数
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> #include <QSqlQuery> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //双击mainwindow.ui文件进入设计模式,按钮转到槽,然后选择clicked()单击信号槽 void MainWindow::on_pushButton_clicked() { QSqlQuery query; //设置属性占位符 query.prepare("insert into student (id, name) " "values (:id, :name)"); //利用绑定函数实现键值对 0:id 1:name // query.bindValue(0, 5); // query.bindValue(1, "sixth"); //利用addBindValue()函数来实现 query.addBindValue(5); query.addBindValue("sixth"); //开始执行 query.exec(); query.exec("select * from student"); query.last(); int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << id << name; } void MainWindow::on_spinBox_textChanged(const QString &arg1) { }
c.运行结果
第二种:利用QSqlQuery类绑定函数实现
a.编辑mainwindow.cpp文件编写槽函数
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> #include <QSqlQuery> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //双击mainwindow.ui文件进入设计模式,按钮转到槽,然后选择clicked()单击信号槽 void MainWindow::on_pushButton_clicked() { QSqlQuery query; query.prepare("select name from student where id = ?"); int id = ui->spinBox->value(); query.addBindValue(id); query.exec(); query.next(); qDebug() << query.value(0).toString(); } void MainWindow::on_spinBox_textChanged(const QString &arg1) { }
b.运行结果
3.QT批处理操作
3.1 编辑mainwindow.cpp文件编写槽函数
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> #include <QSqlQuery> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //双击mainwindow.ui文件进入设计模式,按钮转到槽,然后选择clicked()单击信号槽 void MainWindow::on_pushButton_clicked() { QSqlQuery q; q.prepare("insert into student values (?, ?)"); //插入键 QVariantList ints; ints << 10 << 11 << 12 << 13; q.addBindValue(ints); //插入值 QVariantList names; // 最后一个是空字符串,应与前面的格式相同 // 利用QVariant(QVariant::String)来输入空值NULL,因为前面都是QString类型的 // 所以这里要使用QVariant::String 使格式一致化 names << "xiaoming" << "xiaoliang" << "xiaogang" << QVariant(QVariant::String); q.addBindValue(names); //进行批处理,如果出错就输出错误 execBatch()函数进行批处理 if (!q.execBatch()) qDebug() << q.lastError(); //下面输出整张表 QSqlQuery query; query.exec("select * from student"); while(query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << id << name; } } void MainWindow::on_spinBox_textChanged(const QString &arg1) { }
3.2 运行结果
4.QT事务操作
查询数据库不需要,写的时候需要
事务操作是指一组数据库操作:要么都成功,要么都失败,具有原子性、一致性、隔离性和持久性等特性 典型的事务场景包括银行转账等 来启动一个事务(执行之前) QSqlDatabase::transaction() 提交事务 QSqlDatabase::commmit() 回滚查看(执行之后) QSqlDatabase::commit()或者QSqlDatabase::rollback()//启动事务 QSqlDatabase::database().transaction(); QSqlQuery query; query.exec("SELECT id FROMemployee WHERE name = 'Torild Halvorsen'"); if (query.next()) { int employeeId = query.value(0).toInt(); query.exec("INSERT INTO project(id, name, ownerid) " "VALUES (201, 'ManhattanProject', " + QString::number(employeeId) + ')'); } //回滚 QSqlDatabase::database().commit();
二:QT的SQL查询模型QSqlQueryModel
三:QT的SQL表格模型QSqlTableModel
四:QT的SQL关系表格模型QSqlRelationalTableModel
更多推荐






















所有评论(0)