1. sqlite
在Qt中操作数据库,也是执行对应的sql语句
Qt支持多种数据库类型
1.1 连接指定的数据库类型
QSqlDatabase
addDatabase():连接指定的数据库类型,返回值得到对应数据库的操作对象(QSqlDatabase)
获取到连接数据库对象
1.2 根据类型打开数据库
QSqlDatabase类,函数setDatabaseName():指定操作的数据库文件名
open():打开数据库
1.3 通过sql语句操作数据库文件
QSqlQuery类:执行sql语句
exec():执行sql语句
next():判断执行sql语句是否有结果
1.4 举例
sqlite
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QFileDialog>
#include <QDebug>
#include <QSqlQuery>
#include <QInputDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_open_clicked();
void on_pushButton_add_clicked();
void on_pushButton_del_clicked();
void on_pushButton_update_clicked();
void on_pushButton_select_clicked();
void on_pushButton_close_clicked();
private:
Ui::Widget *ui;
//创建数据库对象
QSqlDatabase db;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
//操作数据库
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//添加一个数据库,获取数据库对象去连接sqlite数据库,返回一个数据库连接对象
db = QSqlDatabase::addDatabase("QSQLITE");
}
Widget::~Widget()
{
delete ui;
}
//打开数据库
void Widget::on_pushButton_open_clicked()
{
//打开文件
QString filename = QFileDialog::getOpenFileName(this,"打开数据库","E:/","database(*.db)");
//打开数据库文件
db.setDatabaseName(filename);
if(db.open()){
ui->lineEdit->clear();
ui->lineEdit->setText("数据库已打开");
}
}
//添加数据
void Widget::on_pushButton_add_clicked()
{
//指定操作的数据库,这里操作db
QSqlQuery query(db);
//输入对话框
QString name = QInputDialog::getText(this,"名字","请输入名字");
QString age = QInputDialog::getText(this,"年龄","请输入年龄");
QString id = QInputDialog::getText(this,"学号","请输入学号");
//编写sql
QString sql = "insert into classone values('%0',%1,'%2')";// % 代表动态的
//给通配符赋值
sql = sql.arg(name).arg(age).arg(id);
ui->lineEdit->clear();
ui->lineEdit->setText(sql);
//打印看一下sql
qDebug()<<sql;
//执行sql
query.exec(sql);
}
//删除数据
void Widget::on_pushButton_del_clicked()
{
QSqlQuery query(db);
QString name = QInputDialog::getText(this,"名字","请输入要删除人的名字");
//编写sql
QString sql = "delete from classone where name = '%0'";
sql = sql.arg(name);
ui->lineEdit->clear();
ui->lineEdit->setText(sql);
query.exec(sql);
}
//修改数据
void Widget::on_pushButton_update_clicked()
{
QSqlQuery query(db);
QString name = QInputDialog::getText(this,"姓名","请输入要修改人的姓名");
QString age = QInputDialog::getText(this,"年龄","请输入修改后的年龄");
QString sql = "update classone set age = '%0' where name = '%1'";
sql = sql.arg(age).arg(name);
ui->lineEdit->clear();
ui->lineEdit->setText(sql);
query.exec(sql);
}
//查询操作
void Widget::on_pushButton_select_clicked()
{
QSqlQuery query(db);
QString sql = "select * from classone";
ui->lineEdit->clear();
ui->lineEdit->setText(sql);
query.exec(sql);
//当执行成功,查询到的数据存储在query对象中
ui->textEdit->clear();
while(query.next()){//next判断是否有下一条数据
QString name = query.value("name").toString();
int age = query.value("age").toInt();
QString id = query.value("id").toString();
ui->textEdit->append(name+" "+QString::number(age)+" "+id+"\n");
qDebug()<<name<<" "<<age<<" "<<id;
}
}
//关闭数据库
void Widget::on_pushButton_close_clicked()
{
db.close();
ui->lineEdit->clear();
ui->lineEdit->setText("数据库已关闭");
}
打开数据库
增加
删除
修改
查询