Qt + 数据库连接+插入+删除+遍历
作者:互联网
项目工程目录:
database.pro
#------------------------------------------------- # # Project created by QtCreator 2019-07-12T07:31:08 # #------------------------------------------------- QT += core gui sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = 01_database TEMPLATE = app SOURCES += main.cpp\ mywidget.cpp HEADERS += mywidget.h FORMS += mywidget.ui
mywidget.h:
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> namespace Ui { class MyWidget; } class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); private slots: void on_buttonDelete_clicked(); void on_buttonSure_clicked(); void on_buttonCancel_clicked(); private: Ui::MyWidget *ui; }; #endif // MYWIDGET_H
mywidget.cpp:
#include "mywidget.h" #include "ui_mywidget.h" #include <QSqlDatabase> #include <QDebug> #include <QMessageBox> #include <QSqlError> #include <QSqlQuery>//专门对SQL语句操作的类 #include <QVariantList> MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget) { ui->setupUi(this); //打印Qt支持的数据库驱动 qDebug()<<QSqlDatabase::drivers(); //添加MySql数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //连接数据库 db.setHostName("127.0.0.1");//数据库服务器IP db.setUserName("root");//数据库用户名 db.setPassword("123");//密码 db.setDatabaseName("studentmanager");//使用哪个数据库 //打开数据库 只有打开数据库才能进行下面的操作: 增 删 改 查 if(db.open() == false) { QMessageBox::warning(this,"错误",db.lastError().text()); return; } /* QSqlQuery query; query.exec("creat table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//这里添加SQL语句创建表 */ #if 0 /*当存在添加多个库的时候, * */ QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL","a"); //连接数据库 db.setHostName("127.0.0.1");//数据库服务器IP db.setUserName("root");//数据库用户名 db.setPassword("123");//密码 db.setDatabaseName("text");//使用哪个数据库 //打开数据库 if(db.open() == false) { QMessageBox::warning(this,"错误",db.lastError().text()); return; } QSqlQuery query1(db1);//将db1传进query query1.exec("creat table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//创建表 #endif //插入 QSqlQuery query; query.exec("insert into student(id ,name, age,score) values (1,'mike',18,59);"); /*批量插入 ,有两种风格*/ #if 0 //odbc风格 //1、预处理语句 ?相当于占位符(此时还不知道里面要填什么内容,先占位置) QSqlQuery query1; query1.prepare("insert into student(name, age,score) values (?,?,? );"); //给字段设置内容 list QVariantList nameList; nameList <<"xiaoming "<<"xiaohong"<<"xiaojiang"; QVariantList ageList; ageList <<11<<22<<33; QVariantList scoreList; scoreList<<59<<69<<79; //给字段绑定相应的值 按顺序绑定(否则会出错) query1.addBindValue(nameList); query1.addBindValue(ageList); query1.addBindValue(scoreList); //执行预处理命令 query1.execBatch(); #endif #if 0 //oracle 风格 //占位符 : + 自定义名字 QSqlQuery query2; query2.prepare("insert into student(name, age,score) values (:name,:age,:score );"); //给字段设置内容 list QVariantList nameList; nameList <<"xiao1 "<<"xiao2"<<"xiao3"; QVariantList ageList; ageList <<12<<22<<32; QVariantList scoreList; scoreList<<52<<62<<72; //给字段绑定 这里就没有顺序了 query2.addBindValue(":name",nameList); query2.addBindValue(":score",scoreList); query2.addBindValue(":age",ageList); //执行预处理命令 query1.execBatch(); #endif /*查找元素 */ QSqlQuery query4; query4.exec("select * from student"); //query4.exec("select * from student where name = "xiao1");//选择确定的某一个人 while(query4.next())//一行一行的遍历 { //取出当前行的内容 qDebug()<<query4.value(0).toInt() <<query4.value(1).toString() <<query4.value("age").toInt() <<query4.value("score").toInt(); } } MyWidget::~MyWidget() { delete ui; } //删除按钮 void MyWidget::on_buttonDelete_clicked() { //获取编辑区的内容 QString name = ui->lineEdit->text(); QString str = QString("delete from student where name = '%1';").arg(name);//删除数据库语句:delete from student where name = 'mike'; //开启一个事务 通过database()函数可以确定操作哪一个数据库 QSqlDatabase::database().transaction(); QSqlDatabase query3; query3.exec(str); } //确定删除 void MyWidget::on_buttonSure_clicked() { //确定删除 QSqlDatabase::database().commit(); } void MyWidget::on_buttonCancel_clicked() { //回滚,撤销 QSqlDatabase::database().rollback(); }
mywidget.ui:
标签:遍历,clicked,Qt,database,数据库,ui,mywidget,include,MyWidget 来源: https://www.cnblogs.com/doker/p/11175405.html