• QT:SQLITE数据库编程


    pro文件:QT         += core gui sql

    widget.ui

    main.cpp

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w("./student.db"); //传入文件名
    7. w.show();
    8. return a.exec();
    9. }

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include //数据库连接
    5. #include //执行SQL语句
    6. namespace Ui {
    7. class Widget;
    8. }
    9. class Widget : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. explicit Widget(QString filename, QWidget *parent = 0); //数据库文件名,存储数据库的操作
    14. ~Widget();
    15. void showInfo();
    16. void clearInput();
    17. private slots:
    18. void on_pb_add_clicked();
    19. void on_pb_delete_clicked();
    20. void on_pb_query_clicked();
    21. void on_pb_update_clicked();
    22. private:
    23. Ui::Widget *ui;
    24. QSqlDatabase db_student; //表示数据库的连接
    25. QString db_file_name; //数据库文件名
    26. };
    27. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include //文件类
    4. #include
    5. #include
    6. Widget::Widget(QString filename, QWidget *parent) :
    7. QWidget(parent),
    8. ui(new Ui::Widget),
    9. db_file_name(filename)
    10. {
    11. ui->setupUi(this);
    12. ui->cbb_gender->setCurrentIndex(-1);
    13. ui->cbb_gender->setFixedSize(224,40);
    14. ui->te_table_content->setReadOnly(true);
    15. QFile file(db_file_name); //要操作的文件名
    16. if(!file.exists())
    17. {
    18. //数据库文件不存在表示这个程序第一次被运行
    19. //连接数据库,创建数据库表,生成数据库文件
    20. //"QSQLITE"表示创建的是基于sqlite数据库的连接
    21. db_student = QSqlDatabase::addDatabase("QSQLITE");
    22. //设置数据库文件的名字
    23. db_student.setDatabaseName(db_file_name);
    24. //打开数据库
    25. if(!db_student.open())
    26. {
    27. qDebug() << "打开数据库失败1";
    28. }
    29. else
    30. {
    31. qDebug() << "打开数据库成功1";
    32. }
    33. //QSqlQuery用于SQL语句的执行,对返回结果的使用
    34. //要指定使用的数据库的连接 db_student
    35. QSqlQuery sql_query(db_student);
    36. //创建数据库表
    37. QString str_query = "create table Student(id varchar(64) PRIMARY KEY,name varchar(64),gender varchar(64),age int)";
    38. //执行SQL语句
    39. if(!sql_query.exec(str_query))
    40. {
    41. qDebug() << str_query <<"failed";
    42. qDebug() << sql_query.lastError().text();
    43. }
    44. //向数据库表Student插入数据(方式一)
    45. str_query = "insert into Student values('2310060001','张三','男',15)";
    46. if(!sql_query.exec(str_query))
    47. {
    48. qDebug() << str_query << "failed";
    49. qDebug() << sql_query.lastError().text();
    50. }
    51. //向数据库表Student插入数据(方式二)
    52. str_query = "insert into Student values(?,?,?,?)";
    53. //准备SQL语句
    54. sql_query.prepare(str_query);
    55. //绑定待定的数据,取代SQL语句里的?
    56. sql_query.addBindValue("2310060002");
    57. sql_query.addBindValue("李四");
    58. sql_query.addBindValue("男");
    59. sql_query.addBindValue(16);
    60. if(!sql_query.exec())
    61. {
    62. qDebug() << str_query << "failed";
    63. qDebug() << sql_query.lastError().text();
    64. }
    65. //向数据库表Student插入数据(方式三)
    66. str_query = "insert into Student values(:id,:name,:gender,:age)";
    67. sql_query.prepare(str_query);
    68. //绑定待定的数据
    69. sql_query.bindValue(":id","2310060003");
    70. sql_query.bindValue(":name","王五");
    71. sql_query.bindValue(":gender","女");
    72. sql_query.bindValue(":age",20);
    73. if(!sql_query.exec())
    74. {
    75. qDebug() << str_query << "failed";
    76. qDebug() << sql_query.lastError().text(); //打印具体错误
    77. }
    78. }
    79. else
    80. {
    81. db_student = QSqlDatabase::addDatabase("QSQLITE");
    82. //设置数据库文件的名字
    83. db_student.setDatabaseName(db_file_name);
    84. //打开数据库
    85. if(!db_student.open())
    86. {
    87. qDebug() << "打开数据库失败2";
    88. }
    89. else
    90. {
    91. qDebug() << "打开数据库成功2";
    92. }
    93. }
    94. // 显示Student表中所有的记录
    95. showInfo();
    96. }
    97. Widget::~Widget()
    98. {
    99. delete ui;
    100. }
    101. //更新信息显示
    102. void Widget::showInfo()
    103. {
    104. QSqlQuery sql_query(db_student); //执行QSL语句
    105. QString str_query = "select * from Student";
    106. if(!sql_query.exec(str_query))
    107. {
    108. qDebug() << str_query << "failed";
    109. qDebug() << sql_query.lastError().text();
    110. }
    111. ui->te_table_content->clear();
    112. while(sql_query.next()) //获得当前的一整条记录
    113. {
    114. QString s1;
    115. for(int i = 0;i < 4;i++) //id,name,gender,age
    116. {
    117. s1 += sql_query.value(i).toString(); //获得一条记录中的第i个表项,0 base
    118. s1 += " ";
    119. }
    120. ui->te_table_content->append(s1);
    121. }
    122. }
    123. //清空
    124. void Widget::clearInput()
    125. {
    126. ui->le_id->clear();
    127. ui->le_name->clear();
    128. ui->cbb_gender->setCurrentIndex(-1);
    129. ui->le_age->clear();
    130. }
    131. //新增
    132. void Widget::on_pb_add_clicked()
    133. {
    134. QSqlQuery sql_query(db_student);
    135. QString str_query = "insert into Student values(?,?,?,?)"; //id,name,gender,age
    136. //准备SQL语句
    137. sql_query.prepare(str_query);
    138. //绑定待定的数据,取代SQL语句里的?
    139. sql_query.addBindValue(ui->le_id->text());
    140. sql_query.addBindValue(ui->le_name->text());
    141. sql_query.addBindValue(ui->cbb_gender->currentText());
    142. sql_query.addBindValue(ui->le_age->text().toInt());
    143. if(!sql_query.exec())
    144. {
    145. qDebug() << str_query << "failed";
    146. qDebug() << sql_query.lastError().text();
    147. }
    148. clearInput();
    149. showInfo();
    150. }
    151. //删除
    152. void Widget::on_pb_delete_clicked()
    153. {
    154. QSqlQuery sql_query(db_student);
    155. QString str_query = "delete from Student where id = :id";
    156. sql_query.prepare(str_query);
    157. sql_query.bindValue(":id",ui->le_id->text());
    158. if(!sql_query.exec())
    159. {
    160. qDebug() << str_query << "failed";
    161. qDebug() << sql_query.lastError().text();
    162. }
    163. clearInput();
    164. showInfo();
    165. }
    166. //查询
    167. void Widget::on_pb_query_clicked()
    168. {
    169. QSqlQuery sql_query(db_student); //操作的数据库
    170. QString str_query = "select * from Student where id = :id";
    171. sql_query.prepare(str_query);
    172. sql_query.bindValue(":id",ui->le_id->text());
    173. if(!sql_query.exec())
    174. {
    175. qDebug() << str_query << "failed";
    176. qDebug() << sql_query.lastError().text();
    177. }
    178. while(sql_query.next()) //获得当前的一整条记录 id,name,gender,age
    179. {
    180. ui->le_name->setText(sql_query.value(1).toString());
    181. ui->cbb_gender->setCurrentText(sql_query.value(2).toString());
    182. ui->le_age->setText(sql_query.value(3).toString());
    183. }
    184. }
    185. //修改
    186. void Widget::on_pb_update_clicked()
    187. {
    188. QSqlQuery sql_query(db_student);
    189. QString str_query = "update Student set name = ?,gender = ?,age = ? where id = ?";
    190. sql_query.prepare(str_query);
    191. sql_query.addBindValue(ui->le_name->text());
    192. sql_query.addBindValue(ui->cbb_gender->currentText());
    193. sql_query.addBindValue(ui->le_age->text().toInt());
    194. sql_query.addBindValue(ui->le_id->text());
    195. if(!sql_query.exec())
    196. {
    197. qDebug() << str_query << "failed";
    198. qDebug() << sql_query.lastError().text();
    199. }
    200. clearInput();
    201. showInfo();
    202. }

    结果

    新增

    删除

    查询

    修改

  • 相关阅读:
    接口自动化测试数据驱动DDT模块使用
    五问五答:第三方风险管理
    【无标题】
    LeetCode 之 长度最小的子数组
    【日常记录】【JS】SSE 流式传输 ChatGPT 的网络传输模式
    前端传String字符串 后端使用enun枚举类出现错误
    HPCPlus怎么使用
    Java关于MongoTemplate的增删改查实战代码解析(全)
    Pandas之Series与DataFrame
    1027. 最长等差数列
  • 原文地址:https://blog.csdn.net/cxy255256/article/details/133613000