• QT数据库,实现数据库增删改查


    QT关于数据库的相关概念

    QT将数据库分为三个层次:

    数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin

    sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError

    用户接口层:提供一些模型QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel

    实现数据库操作的相关方法

    添加数据库:

    1. [static] QSqlDatabase QSqlDatabase::addDatabase(
    2. QSqlDriver *driver,
    3. const QString &connectionName = QLatin1String(defaultConnection))
    4. QSQLITE SQLite version 3 or above

    设置数据库名称:

    ​​​​​​​void QSqlDatabase::setDatabaseName(const QString &name)

    包含数据库:

    bool QSqlDatabase::contains(const QString &connectionName = QLatin1String(defaultConnection)) 

    打开数据库:

    ​​​​​​​bool QSqlDriver::open(const QString &db)

    关闭数据库:

    void QSqlDatabase::close() 

    错误信息:

    QSqlError QSqlDatabase::lastError()

    sql语句执行:构造一个QSqlQuery类对象,调用其成员函数exec,执行sql语句

    bool QSqlQuery::exec(const QString &query)

    遍历查询结果的函数:

    bool QSqlQuery::next()

    通过数据库实现学生管理系统

    功能界面:

    主要功能代码

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. //判断数据库对象是否包含了自己使用的数据库,例如Student.db
    9. if(!db.contains("Student,db"))
    10. {
    11. //添加一个数据库
    12. //函数原型:static QSqlDatabase addDatabase(const QString& type);
    13. //参数:数据库版本
    14. //返回值:添加的数据库
    15. db = QSqlDatabase::addDatabase("QSQLITE"); //表示使用的是sqlite3版本的数据库
    16. //给数据库命名
    17. db.setDatabaseName("Student.db");
    18. }
    19. //打开数据库
    20. if(!db.open())
    21. {
    22. QMessageBox::information(this, "提示", "数据库打开失败");
    23. return;
    24. }
    25. //代码执行到这说明数据库创建并打开完毕,就可以创建数据表了
    26. //创建数据表需要使用sql语句,需要使用QsqlQuery类对象来完成
    27. //准备sql语句
    28. QString sql = "create table if not exists myTable(" //创建表的sql语句
    29. "id integer primary key autoincrement," //id主键,允许自增
    30. "numb integer," //学号
    31. "name varchar(10)," //姓名
    32. "score integer," //分数
    33. "sex varchar(4))"; //性别
    34. //定义语句执行者
    35. QSqlQuery query;
    36. //使用query执行sql语句
    37. if(!query.exec(sql))
    38. {
    39. QMessageBox::information(this, "失败", "创建表失败");
    40. }else{
    41. QMessageBox::information(this, "成功", "创建表成功");
    42. }
    43. }
    44. Widget::~Widget()
    45. {
    46. delete ui;
    47. }
    48. //录入按钮对应的槽函数
    49. void Widget::on_pushButton_clicked()
    50. {
    51. //获取ui界面中要存入数据库中的数据
    52. int numb_ui = ui->lineEdit->text().toInt(); //获取UI界面的学号
    53. QString name_ui = ui->lineEdit_2->text(); //获取UI界面的姓名
    54. int score_ui = ui->lineEdit_3->text().toInt(); //获取UI界面的成绩
    55. QString sex_ui = ui->lineEdit_4->text(); //获取UI界面的性别
    56. if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0 || sex_ui.isEmpty())
    57. {
    58. QMessageBox::information(this, "提示", "请将信息填写完整");
    59. return;
    60. }
    61. //准备sql语句
    62. QString sql =QString("insert into myTable(numb, name, score, sex) values (%1, '%2', %3, '%4')").arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);
    63. //定义语句执行者
    64. QSqlQuery query;
    65. if(!query.exec(sql))
    66. {
    67. QMessageBox::information(this, "失败", "录入数据失败");
    68. }else{
    69. QMessageBox::information(this, "成功", "录入数据成功");
    70. }
    71. //清除
    72. ui->lineEdit->clear();
    73. ui->lineEdit_2->clear();
    74. ui->lineEdit_3->clear();
    75. ui->lineEdit_4->clear();
    76. }
    77. //展示按钮对应的槽函数
    78. void Widget::on_pushButton_2_clicked()
    79. {
    80. //准备sql语句
    81. QString sql = "select * from myTable";
    82. //定义语句执行者
    83. QSqlQuery query;
    84. if(!query.exec(sql))
    85. {
    86. QMessageBox::information(this, "失败", "没有找到数据");
    87. return;
    88. }
    89. //将查找到的所有结果都放到query对象中
    90. //可以通过next函数不断遍历查询结果
    91. int i = 0; //记录行号
    92. while(query.next())
    93. {
    94. //遍历的是任意一组记录,query.record
    95. //要找到每条记录中的每个数据,使用value(i)
    96. //将数据库中的表格战术到UI界面
    97. //ui->tableWidget->setItem()
    98. //query.record().value()
    99. for(int j=0; jrecord().count()-1; j++)
    100. {
    101. ui->tableWidget->setItem(i, j, new QTableWidgetItem(query.record().value(j+1).toString()));
    102. }
    103. i++;
    104. }
    105. }
  • 相关阅读:
    Python刷算法题常见内置函数、方法技巧【最全汇总】
    AL遮天传 DL-深度学习模型的训练技巧
    计算机网络-数据链路层(以太网(802.3局域网,10BASE-T以太网,适配器,MAC地址,以太网MAC帧格式))
    【数据分享】厦门市共享单车数据
    想知道PDF转Word软件哪个好?向你推荐3个自用软件
    Anaconda全网最全conda命令行(新建、复制、重命名、删除、国内源加速等)
    电容屏物体识别手工制作
    4.构造类型,类型转换
    算法:二元选择排序
    有什么拍照识别文字的软件?这篇文章看到就有收获哦
  • 原文地址:https://blog.csdn.net/weixin_53478812/article/details/132675868