提示:查询所有记录和条件查询在操作中有,就不单独示例了;源码在本文第三节(源码含详细注释)。
1.1 创建数据表下图为创建数据表的操作,其步骤分为:
- 确保当前没有数据表
- 创建数据表
- 查看数据表是否创建成功
- 查看初始化数据是否成功
下图为添加记录的操作,其步骤分为:
- 查看学生信息表当前内容
- 添加学生信息
- 使用条件查询查询添加的记录(若有则添加成功)
- 因为是sql操作,所以需要在pro文件添加“QT += sql”;
- SQLITE是一款开源轻量级的数据库软件,它不需要服务器,也不用进行配置就能使用的数据库;
- SQLITE在使用时无需指定主机名、用户名、密码、端口号等信息,仅指定数据库即可;
提示:源码中的槽函数都是通过ui文件的转到槽功能添加,所有没有连接信号槽的代码
3.1 CDBTest.h#ifndef CDBTEST_H #define CDBTEST_H #include3.2 CDBTest.cpp#include namespace Ui { class CDBTest; } class CDBTest : public QMainWindow { Q_OBJECT public: explicit CDBTest(QWidget *parent = 0); ~CDBTest(); //! 代码复用的函数 //! 在条件查询和普通查询中的部分代码相同,完全可以封装成一个函数使用; //! 细心的小伙伴会发现,其实条件查询和普通查询完全可以写成一个函数,有兴趣的话可以试试。 void displayRecord(QSqlQuery query); private slots: void on_showTablesBt_clicked(); //显示所有表 void on_selectAllBt_clicked(); //普通查询:查询表中所有信息 void on_selectWhereBt_clicked(); //条件查询 void on_addInfoBt_clicked(); //添加记录 void on_createTableBt_clicked(); //创建数据表 private: Ui::CDBTest *ui; QSqlDatabase m_sqliteDB; //sqlite数据库对象 }; #endif // CDBTEST_H
#include "CDBTest.h" #include "ui_CDBTest.h" #include总结#include #include #include #include #include CDBTest::CDBTest(QWidget *parent) : QMainWindow(parent), ui(new Ui::CDBTest) { ui->setupUi(this); this->setWindowTitle("QSQLITE练习"); //指定数据库类型 m_sqliteDB = QSqlDatabase::addDatabase("QSQLITE"); //指定数据库(若是数据库不存在,会自动创建,不过记得带后缀名哦) m_sqliteDB.setDatabaseName("./test.db"); if(!m_sqliteDB.open()) { ui->textBrowser->append(m_sqliteDB.lastError().text()); return; } } CDBTest::~CDBTest() { delete ui; } void CDBTest::displayRecord(QSqlQuery query) { //获取一个记录对象 QSqlRecord rec = query.record(); QString columTitle(""); //用于组列标题的变量 for(int index = 0; index != rec.count(); ++index) { //循环获取每个列标题,并添加到列标题字符串中 columTitle.append(rec.fieldName(index) + "t"); } //将列标题添加到显示控件中 ui->textBrowser->append(columTitle); //循环获取每条记录 while (query.next()) { //将当前记录的数据组成字符串,然后添加到显示控件中 QString record(""); record.append(query.value(0).toString() + "t"); record.append(query.value(1).toString() + "t"); record.append(query.value(2).toString() + "t"); record.append(query.value(3).toString() + "t"); ui->textBrowser->append(record); } ui->textBrowser->append("=========================Run successfully=======================n"); } void CDBTest::on_showTablesBt_clicked() { ui->textBrowser->append("数据库中的所有表如下:"); foreach (QString table, m_sqliteDB.tables()) { ui->textBrowser->append(table); } ui->textBrowser->append("=========================Run successfully=======================n"); } void CDBTest::on_selectAllBt_clicked() { QSqlQuery query; ui->textBrowser->append("StudentsInfo:"); //运行sql语句并判断是否运行成功 bool flag = query.exec("select * from StudentsInfo"); if(!flag) { ui->textBrowser->append(query.lastError().text()); return; } //调用显示函数显示记录 displayRecord(query); } void CDBTest::on_selectWhereBt_clicked() { QSqlQuery query; ui->textBrowser->append("StudentsInfo [age > 18]:"); //运行sql语句并判断是否运行成功 bool flag = query.exec("select * from StudentsInfo where age > 18"); if(!flag) { ui->textBrowser->append(query.lastError().text()); return; } //调用显示函数显示记录 displayRecord(query); } void CDBTest::on_addInfoBt_clicked() { //当没有学号和姓名时不能添加 if(ui->sIdEdit->text().isEmpty() || ui->nameEdit->text().isEmpty()) return; QSqlQuery query; //组sql语句,并将对用控件的值插入 QString sql = QString("insert into StudentsInfo values('%1', '%2', %3, %4)") .arg(ui->sIdEdit->text()) .arg(ui->nameEdit->text()) .arg(ui->ageSpinBox->value()) .arg(ui->heightSpinBox->value()); if(query.exec(sql)) ui->textBrowser->append(query.lastError().text()); ui->textBrowser->append("=========================Run successfully=======================n"); } void CDBTest::on_createTableBt_clicked() { QSqlQuery query; //创建表的SQL语句 QString sql = "create table StudentsInfo(" "id vchar primary key," "name vchar," "age int," "height int)"; //运行并判断是否创建成功 if(!query.exec(sql)) { ui->textBrowser->append(query.lastError().text()); return; } //为数据表初始化数据,方便做查询操作 sql = "insert into StudentsInfo values('%1', '学生%2', %3, %4)"; srand(QDateTime::currentMSecsSinceEpoch()); //设置随机数的基数 for(int index = 1; index != 4; ++index) { QString sqlTemp = sql //! 含义 字符,字符位数,字符进制,当字符比字符位数少时指定的补位字符 //! 如我这里的补位字符为'0' .arg(index, 3, 10, QLatin1Char('0')) .arg(index) .arg(rand() % 40).arg(rand() % 300); query.exec(sqlTemp); } ui->textBrowser->append("=========================Created successfully=======================n"); }
源码包含创建数据库(虽然没看出来,但这个数据库其实是自动创建的)、创建数据表、添加记录、查询记录等操作;当然了其中难免有一些BUG,比如创建、查询等功能已经写死了,不能有更灵活的操作,有兴趣的小伙伴可以试着补全。强烈刚开始学习Qt的小伙伴可以做这个练习。
对于SQLITE,在考虑不能接网、考虑电脑性能、便携、配置问题等情况都可以使用哦。
Qt数据库练习之QSqlQuery、QSqlQueryModel的简单使用(含源码+注释)
Qt数据库练习之QSqlTableModel的使用(MySql数据库示例,含源码+注释)
友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)
注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除



