在QT中使用数据库
QMYSQL (MySQL)
QSQLITE (SQlite 3 ) - QT 自带的数据库
~/Qt5.4.1/5.4/gcc_64/plugins/sqldrivers // 数据库.so动态库文件
别的数据库可以下载下来,直接拷贝到该目录,就可以直接用了。
QSqlDatabase 建立QT程序和数据库的连接
/** 代码演示 - assistant **/
// 建立于数据库的连接
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
// 设置数据库的名字 .db
db.setDatabaseName("custom.db");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open(); // 打开数据库
QSqlQuery 提供SQL语句操作和执行方法
/** 代码演示 - assistant **/
QSqlQuery query;
query.exec ("SQL语句"); // 复杂的SQL语句可由DBA提供
QSqlQueryModel 是高层次接口,也可以用于执行SQL语句,能以Model的方式去遍历结果集
/** 代码演示 - assistant **/
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT name, salary FROM employee");
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
QTableView *view = new QTableView;
view->setModel(model);
view->show();
《案例》学生信息管理系统
工程名:SqliteQt
类名:SqlDialog
Qt designer Combo Box 组合框 // 双击可以新建其内容条目
Qt designer Tabel View 组合框
创建--->绘制ui--->.pro中的QT+=添加sql--->添加相应的头文件--->编写代码
/** 学生信息管理系统 - 代码演示 **/
// .h头文件
#ifndef SQLDIALOG_H
#define SQLDIALOG_H
#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class SqlDialog;
}
class SqlDialog : public QDialog {
Q_OBJECT
public:
explicit SqlDialog(QWidget *parent = 0);
~SqlDialog();
private slots:
void on_sortButton_clicked();
void on_insertButton_clicked();
void on_deleteButton_clicked();
void on_modifyButton_clicked();
private:
// 创建数据库
void createDB (void);
// 创建数据表
void createTable (void);
// 查询数据
void queryTable (void);
private:
QSqlDatabase db; // 建立QT程序和数据的连接
QSqlQueryModel model; // 保存和遍历查询结果
private:
Ui::SqlDialog *ui;
};
#endif // SQLDIALOG_H
// .cpp源文件
#include "SqlDialog.h"
#include "ui_SqlDialog.h"
SqlDialog::SqlDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SqlDialog) {
ui->setupUi(this);
createDB ();
createTable ();
queryTable ();
}
SqlDialog::~SqlDialog() {
delete ui;
}
//创建数据库文件 <=等价于=> $: sqlite3 menu.db
void SqlDialog::createDB (void) {
// 建立和sqlite数据库的连接
db = QSqlDatabase::addDatabase ("QSQLITE");
// 设置数据库文件的名称
db.setDatabaseName ("menu.db");
// 对数据库进行操作之前必须先打开数据库
if (db.open () == false) {
// 如果打开失败,弹出提示错误信息的信息窗口
QMessageBox::critical (this, "Database open error", db.lastError ().text ());
}
}
// 创建数据表
void SqlDialog::createTable (void) {
// 构建创建数据表sql语句的字符串
QString str ("CREATE TABLE Student(id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, score REAL NOT NULL)");
// 执行sql语句
QSqlQuery query;
query.exec (str);
}
// 查询数据 <==> SELECT * FROM ...
void SqlDialog::queryTable (void) {
// 构造一个查询数据表的sql语句
QString str ("SELECT * FROM Student");
// 执行sql语句并保存结果到model
model.setQuery (str);
// 显示结果到ui
ui->tableView->setModel (&model);
}
// 排序操作
void SqlDialog::on_sortButton_clicked() {
// 获取排序的关键字 id / score
QString value = ui->valueComboBox->currentText ();
// 获取排序的条件:升序 / 降序
QString conditon;
if (ui->condComboBox->currentIndex ()) {
conditon = "DESC";
} else {
conditon = "ASC";
}
QString sortSql = QString (
"SELECT * FROM Student ORDER BY %1 %2").arg (value).arg (conditon);
// 执行sql语句并保存结果到model
model.setQuery (sortSql);
// 显示结果到ui
ui->tableView->setModel (&model);
}
// 插入按钮
void SqlDialog::on_insertButton_clicked() {
// 获取用户输入的学号、姓名、成绩
int id = ui->idEdit->text ().toInt ();
QString name = ui->nameEidt->text ();
double score = ui->scoreEdit->text ().toDouble ();
// 构造插入操作的sql语句
QString insertSql = QString (
"INSERT INTO Student VALUES(%1, '%2', '%3')").arg (id).arg (name).arg (score);
// 执行插入的sql语句
QSqlQuery query;
query.exec (insertSql);
// 查询并显示
queryTable ();
}
// 删除数据,根据ID删除 1 条数据
void SqlDialog::on_deleteButton_clicked() {
int id = ui->idEdit->text ().toInt ();
QString deleteSql = QString (
"DELETE FROM Student WHERE id = %1").arg (id);
// 执行插入的sql语句
QSqlQuery query;
query.exec (deleteSql);
// 查询并显示
queryTable ();
}
// 修改数据,根据ID修改成绩
void SqlDialog::on_modifyButton_clicked() {
int id = ui->idEdit->text ().toInt ();
double score = ui->scoreEdit->text ().toDouble ();
QString ModifySql = QString (
"UPDATE Student SET score = %1 WHERE id = %2").arg (score).arg (id);
// 执行插入的sql语句
QSqlQuery query;
query.exec (ModifySql);
// 查询并显示
queryTable ();
}
// main.cpp
#include "SqlDialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
SqlDialog w;
w.show();
return a.exec();
}
【提示】'学生信息管理系统 - 项目'
加入以下内容,完善后可作为resume项目。
验证器:LineEdit 输入限制
提交重复提示:id重复提示
账户登录:teacher001登录跳转
平均/最大/最小:加法计算器代码复用尝试求相关成绩,内部排序获取第一个
显示当前系统时间:显示实时时间在界面上
录入时间加入数据库维度:addTime维度