
提示找不到驱动
解决方法:
https://www.cnblogs.com/jiuzheer/p/9480595.html
https://blog.csdn.net/abigale_zhw/article/details/8252271
0 准备
1.导入模块
QT += sql
2.头文件
#include <QSqlDatabase>#include <QSqlError>#include <QSqlQuery>
1.mysql数据库的连接及其增删改查
#include "widgetsql.h"#include "ui_widgetsql.h"#include <QSqlDatabase>#include <QDebug>#include <QMessageBox>#include <QSqlError>#include <QSqlQuery>#include <QVariantList>WidgetSql::WidgetSql(QWidget *parent) :QWidget(parent),ui(new Ui::WidgetSql){ui->setupUi(this);//QT支持的数据库//("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")qDebug() << QSqlDatabase::drivers();//添加mysql数据库QSqlDatabase mysql = QSqlDatabase::addDatabase("QMYSQL");//设置标识,多个数据库要区分// QSqlDatabase mysql2 = QSqlDatabase::addDatabase("QMYSQL", "a");// QSqlQuery query(mysql2);//连接数据库mysql.setHostName("127.0.0.1"); //数据库IPmysql.setUserName("root"); //设置用户名mysql.setPassword("12345"); //输入密码mysql.setDatabaseName("test"); //指定哪个数据库//打开数据库if(mysql.open() == false) //数据库打开失败{QMessageBox::warning(this, "错误", mysql.lastError().text());return;} else {qDebug() << "初始化成功";}//数据表的创建QSqlQuery query;//执行sql语句query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int);");//数据插入(增加)->单条插入// query.exec("insert into student(id, name, age, score) values(2, '12515', 18, 59);");//批量插入 oracle风格 占位符 : + 自定义名字// query.prepare("insert into student(name, age, score) values(:name, :age, :score)");// //给字段设置内容 list// QVariantList nameList;// nameList << "xiaoa" << "xiaob" << "xiaoc";// QVariantList ageList;// ageList << 33 << 44 << 55;// QVariantList scoreList;// scoreList << 89 << 90 << 99;// //给字段绑定// query.bindValue(":name", nameList);// query.bindValue(":score", scoreList);// query.bindValue(":age", ageList);// //执行预处理命令// query.execBatch();//批量插入//odbc风格//预处理语句// ? 相当于 占位符// query.prepare("insert into student(name, age, score) values(?, ?, ?)");// //给字段设置内容 list// QVariantList nameList;// nameList << "xiaoming" << "xiaolong" << "xiaojiang";// QVariantList ageList;// ageList << 11 << 22 << 33;// QVariantList scoreList;// scoreList << 59 << 69 << 79;// //给字段绑定相应的值 按顺序绑定// query.addBindValue(nameList);// query.addBindValue(ageList);// query.addBindValue(scoreList);// //执行预处理命令// query.execBatch();//查// query.exec("select * from student");// while(query.next()) //一行一行遍历// {// //取出当前行的内容// qDebug() << query.value(0).toInt()// << query.value(1).toString()// << query.value("age").toInt()// << query.value("score").toInt();// }//改 其实就是sql语句query.exec("update student set score = 10 where id = 3;");//删除query.exec("delete from student where id = 3;");}WidgetSql::~WidgetSql(){delete ui;}
数据库创建成功
数据插入成功
执行查询成功
修改成功
2.事务操作
void WidgetSql::on_btnDel_clicked(){//获取行编辑内容QString name = ui->lineEdit->text();//sql语句QString sql = QString("delete from student where name = '%1'").arg(name);//开启一个事务//注意:如果我们已经连接过数据库,可以使用该static自动找到//如果有多个数据库,我们需要指定是哪个数据库,不指定就是默认的QSqlDatabase::database().transaction();QSqlQuery query;query.exec(sql);}void WidgetSql::on_btnSure_clicked(){//确定删除QSqlDatabase::database().commit();}void WidgetSql::on_btnCancel_clicked(){//回滚,撤销QSqlDatabase::database().rollback();}
3. sqllite数据库
参考:
https://www.cnblogs.com/xia-weiwen/p/6806709.html
#include "widgetsqllite.h"#include "ui_widgetsqllite.h"#include <QSqlDatabase>#include <QSqlError>#include <QSqlQuery>#include <QDebug>WidgetSqlLite::WidgetSqlLite(QWidget *parent) :QWidget(parent),ui(new Ui::WidgetSqlLite){ui->setupUi(this);//创建数据库QSqlDatabase database;//判断是否已经连接if (QSqlDatabase::contains("qt_sql_default_connection")){database = QSqlDatabase::database("qt_sql_default_connection");}else{database = QSqlDatabase::addDatabase("QSQLITE");database.setDatabaseName("../test.db");}//使用open()打开数据库,并判断是否成功if (!database.open()) {qDebug() << "Error: Failed to connect database." << database.lastError();} else {qDebug() << "Open success";}//创建表QSqlQuery sql_query;// QString create_sql = "create table student(id INTEGER primary key, name varchar(30), age int)";// sql_query.prepare(create_sql);// if(!sql_query.exec())// {// qDebug() << "Error: Fail to create table." << sql_query.lastError();// }// else// {// qDebug() << "Table created!";// }//插入数据//插入单条数据if(!sql_query.exec("INSERT INTO student VALUES(NULL, 'Li', 23);")){qDebug() << sql_query.lastError();}else{qDebug() << "inserted Li!";}//修改数据if(!sql_query.exec("update student set age = 10 where name = 'Li';")){qDebug() << sql_query.lastError();}else{qDebug() << "update!";}//查QString select_sql = "select * from student";if(!sql_query.exec(select_sql)){qDebug() << sql_query.lastError();}else{while(sql_query.next()){int id = sql_query.value(0).toInt();QString name = sql_query.value(1).toString();qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);}}//删除QString delete_sql = "delete from student where id = 1";if(!sql_query.exec(delete_sql)){qDebug()<<sql_query.lastError();}else{qDebug()<<"deleted!";}database.close();}WidgetSqlLite::~WidgetSqlLite(){delete ui;}

