提示找不到驱动
解决方法:
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"); //数据库IP
mysql.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;
}