数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin
sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError
用户接口层:提供一些模型QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel
添加数据库:
- [static] QSqlDatabase QSqlDatabase::addDatabase(
- QSqlDriver *driver,
- const QString &connectionName = QLatin1String(defaultConnection))
- 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()
功能界面:

主要功能代码
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- //判断数据库对象是否包含了自己使用的数据库,例如Student.db
- if(!db.contains("Student,db"))
- {
- //添加一个数据库
- //函数原型:static QSqlDatabase addDatabase(const QString& type);
- //参数:数据库版本
- //返回值:添加的数据库
- db = QSqlDatabase::addDatabase("QSQLITE"); //表示使用的是sqlite3版本的数据库
-
-
- //给数据库命名
- db.setDatabaseName("Student.db");
- }
-
- //打开数据库
- if(!db.open())
- {
- QMessageBox::information(this, "提示", "数据库打开失败");
- return;
- }
-
- //代码执行到这说明数据库创建并打开完毕,就可以创建数据表了
- //创建数据表需要使用sql语句,需要使用QsqlQuery类对象来完成
- //准备sql语句
- QString sql = "create table if not exists myTable(" //创建表的sql语句
- "id integer primary key autoincrement," //id主键,允许自增
- "numb integer," //学号
- "name varchar(10)," //姓名
- "score integer," //分数
- "sex varchar(4))"; //性别
- //定义语句执行者
- QSqlQuery query;
- //使用query执行sql语句
- if(!query.exec(sql))
- {
- QMessageBox::information(this, "失败", "创建表失败");
- }else{
- QMessageBox::information(this, "成功", "创建表成功");
- }
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
- //录入按钮对应的槽函数
- void Widget::on_pushButton_clicked()
- {
- //获取ui界面中要存入数据库中的数据
- int numb_ui = ui->lineEdit->text().toInt(); //获取UI界面的学号
- QString name_ui = ui->lineEdit_2->text(); //获取UI界面的姓名
- int score_ui = ui->lineEdit_3->text().toInt(); //获取UI界面的成绩
- QString sex_ui = ui->lineEdit_4->text(); //获取UI界面的性别
-
- if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0 || sex_ui.isEmpty())
- {
- QMessageBox::information(this, "提示", "请将信息填写完整");
- return;
- }
-
- //准备sql语句
- 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);
-
- //定义语句执行者
- QSqlQuery query;
-
- if(!query.exec(sql))
- {
- QMessageBox::information(this, "失败", "录入数据失败");
- }else{
- QMessageBox::information(this, "成功", "录入数据成功");
- }
-
- //清除
- ui->lineEdit->clear();
- ui->lineEdit_2->clear();
- ui->lineEdit_3->clear();
- ui->lineEdit_4->clear();
-
- }
-
- //展示按钮对应的槽函数
- void Widget::on_pushButton_2_clicked()
- {
- //准备sql语句
- QString sql = "select * from myTable";
-
- //定义语句执行者
- QSqlQuery query;
-
- if(!query.exec(sql))
- {
- QMessageBox::information(this, "失败", "没有找到数据");
- return;
- }
-
- //将查找到的所有结果都放到query对象中
- //可以通过next函数不断遍历查询结果
- int i = 0; //记录行号
- while(query.next())
- {
- //遍历的是任意一组记录,query.record
- //要找到每条记录中的每个数据,使用value(i)
- //将数据库中的表格战术到UI界面
- //ui->tableWidget->setItem()
- //query.record().value()
-
- for(int j=0; j
record().count()-1; j++) - {
- ui->tableWidget->setItem(i, j, new QTableWidgetItem(query.record().value(j+1).toString()));
- }
- i++;
- }
- }