image.png
提示找不到驱动
解决方法:
https://www.cnblogs.com/jiuzheer/p/9480595.html

https://blog.csdn.net/abigale_zhw/article/details/8252271

0 准备

1.导入模块

  1. QT += sql

2.头文件

  1. #include <QSqlDatabase>
  2. #include <QSqlError>
  3. #include <QSqlQuery>

1.mysql数据库的连接及其增删改查

  1. #include "widgetsql.h"
  2. #include "ui_widgetsql.h"
  3. #include <QSqlDatabase>
  4. #include <QDebug>
  5. #include <QMessageBox>
  6. #include <QSqlError>
  7. #include <QSqlQuery>
  8. #include <QVariantList>
  9. WidgetSql::WidgetSql(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::WidgetSql)
  12. {
  13. ui->setupUi(this);
  14. //QT支持的数据库
  15. //("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
  16. qDebug() << QSqlDatabase::drivers();
  17. //添加mysql数据库
  18. QSqlDatabase mysql = QSqlDatabase::addDatabase("QMYSQL");
  19. //设置标识,多个数据库要区分
  20. // QSqlDatabase mysql2 = QSqlDatabase::addDatabase("QMYSQL", "a");
  21. // QSqlQuery query(mysql2);
  22. //连接数据库
  23. mysql.setHostName("127.0.0.1"); //数据库IP
  24. mysql.setUserName("root"); //设置用户名
  25. mysql.setPassword("12345"); //输入密码
  26. mysql.setDatabaseName("test"); //指定哪个数据库
  27. //打开数据库
  28. if(mysql.open() == false) //数据库打开失败
  29. {
  30. QMessageBox::warning(this, "错误", mysql.lastError().text());
  31. return;
  32. } else {
  33. qDebug() << "初始化成功";
  34. }
  35. //数据表的创建
  36. QSqlQuery query;
  37. //执行sql语句
  38. query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int);");
  39. //数据插入(增加)->单条插入
  40. // query.exec("insert into student(id, name, age, score) values(2, '12515', 18, 59);");
  41. //批量插入 oracle风格 占位符 : + 自定义名字
  42. // query.prepare("insert into student(name, age, score) values(:name, :age, :score)");
  43. // //给字段设置内容 list
  44. // QVariantList nameList;
  45. // nameList << "xiaoa" << "xiaob" << "xiaoc";
  46. // QVariantList ageList;
  47. // ageList << 33 << 44 << 55;
  48. // QVariantList scoreList;
  49. // scoreList << 89 << 90 << 99;
  50. // //给字段绑定
  51. // query.bindValue(":name", nameList);
  52. // query.bindValue(":score", scoreList);
  53. // query.bindValue(":age", ageList);
  54. // //执行预处理命令
  55. // query.execBatch();
  56. //批量插入
  57. //odbc风格
  58. //预处理语句
  59. // ? 相当于 占位符
  60. // query.prepare("insert into student(name, age, score) values(?, ?, ?)");
  61. // //给字段设置内容 list
  62. // QVariantList nameList;
  63. // nameList << "xiaoming" << "xiaolong" << "xiaojiang";
  64. // QVariantList ageList;
  65. // ageList << 11 << 22 << 33;
  66. // QVariantList scoreList;
  67. // scoreList << 59 << 69 << 79;
  68. // //给字段绑定相应的值 按顺序绑定
  69. // query.addBindValue(nameList);
  70. // query.addBindValue(ageList);
  71. // query.addBindValue(scoreList);
  72. // //执行预处理命令
  73. // query.execBatch();
  74. //查
  75. // query.exec("select * from student");
  76. // while(query.next()) //一行一行遍历
  77. // {
  78. // //取出当前行的内容
  79. // qDebug() << query.value(0).toInt()
  80. // << query.value(1).toString()
  81. // << query.value("age").toInt()
  82. // << query.value("score").toInt();
  83. // }
  84. //改 其实就是sql语句
  85. query.exec("update student set score = 10 where id = 3;");
  86. //删除
  87. query.exec("delete from student where id = 3;");
  88. }
  89. WidgetSql::~WidgetSql()
  90. {
  91. delete ui;
  92. }

数据库创建成功
image.png

数据插入成功
image.png

执行查询成功
image.png

修改成功
image.png

删除成功
image.png
**

2.事务操作

  1. void WidgetSql::on_btnDel_clicked()
  2. {
  3. //获取行编辑内容
  4. QString name = ui->lineEdit->text();
  5. //sql语句
  6. QString sql = QString("delete from student where name = '%1'").arg(name);
  7. //开启一个事务
  8. //注意:如果我们已经连接过数据库,可以使用该static自动找到
  9. //如果有多个数据库,我们需要指定是哪个数据库,不指定就是默认的
  10. QSqlDatabase::database().transaction();
  11. QSqlQuery query;
  12. query.exec(sql);
  13. }
  14. void WidgetSql::on_btnSure_clicked()
  15. {
  16. //确定删除
  17. QSqlDatabase::database().commit();
  18. }
  19. void WidgetSql::on_btnCancel_clicked()
  20. {
  21. //回滚,撤销
  22. QSqlDatabase::database().rollback();
  23. }

3. sqllite数据库

参考:
https://www.cnblogs.com/xia-weiwen/p/6806709.html

  1. #include "widgetsqllite.h"
  2. #include "ui_widgetsqllite.h"
  3. #include <QSqlDatabase>
  4. #include <QSqlError>
  5. #include <QSqlQuery>
  6. #include <QDebug>
  7. WidgetSqlLite::WidgetSqlLite(QWidget *parent) :
  8. QWidget(parent),
  9. ui(new Ui::WidgetSqlLite)
  10. {
  11. ui->setupUi(this);
  12. //创建数据库
  13. QSqlDatabase database;
  14. //判断是否已经连接
  15. if (QSqlDatabase::contains("qt_sql_default_connection"))
  16. {
  17. database = QSqlDatabase::database("qt_sql_default_connection");
  18. }
  19. else
  20. {
  21. database = QSqlDatabase::addDatabase("QSQLITE");
  22. database.setDatabaseName("../test.db");
  23. }
  24. //使用open()打开数据库,并判断是否成功
  25. if (!database.open()) {
  26. qDebug() << "Error: Failed to connect database." << database.lastError();
  27. } else {
  28. qDebug() << "Open success";
  29. }
  30. //创建表
  31. QSqlQuery sql_query;
  32. // QString create_sql = "create table student(id INTEGER primary key, name varchar(30), age int)";
  33. // sql_query.prepare(create_sql);
  34. // if(!sql_query.exec())
  35. // {
  36. // qDebug() << "Error: Fail to create table." << sql_query.lastError();
  37. // }
  38. // else
  39. // {
  40. // qDebug() << "Table created!";
  41. // }
  42. //插入数据
  43. //插入单条数据
  44. if(!sql_query.exec("INSERT INTO student VALUES(NULL, 'Li', 23);"))
  45. {
  46. qDebug() << sql_query.lastError();
  47. }
  48. else
  49. {
  50. qDebug() << "inserted Li!";
  51. }
  52. //修改数据
  53. if(!sql_query.exec("update student set age = 10 where name = 'Li';"))
  54. {
  55. qDebug() << sql_query.lastError();
  56. }
  57. else
  58. {
  59. qDebug() << "update!";
  60. }
  61. //查
  62. QString select_sql = "select * from student";
  63. if(!sql_query.exec(select_sql))
  64. {
  65. qDebug() << sql_query.lastError();
  66. }
  67. else
  68. {
  69. while(sql_query.next())
  70. {
  71. int id = sql_query.value(0).toInt();
  72. QString name = sql_query.value(1).toString();
  73. qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);
  74. }
  75. }
  76. //删除
  77. QString delete_sql = "delete from student where id = 1";
  78. if(!sql_query.exec(delete_sql))
  79. {
  80. qDebug()<<sql_query.lastError();
  81. }
  82. else
  83. {
  84. qDebug()<<"deleted!";
  85. }
  86. database.close();
  87. }
  88. WidgetSqlLite::~WidgetSqlLite()
  89. {
  90. delete ui;
  91. }