Qt中SQLite的使用
前提:因为我最近看了个上位机的项目,它用的是SQLite数据库而不是MySQL,所以我打算学一下
整体上的代码逻辑其实和MySQL相同
不同的是这个SQLite是会在目录下生成一个.db文件存储数据
还有就是记得.pro或者CMakeLists.txt中做相应的配置
这是头文件
点击查看代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
bool createSqliteDB();//创建SQlite数据库
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase db;
};
#endif // MAINWINDOW_H
点击查看代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
createSqliteDB();
}
//创建SQlite数据库
bool MainWindow::createSqliteDB()
{
// 1. 获取数据库连接实例
db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库文件,不存在会自动创建
db.setDatabaseName("./data.db");
// 2. 打开数据库
if (!db.open())
{
qDebug() << "数据库打开失败:" << db.lastError().text();
return false;
}
qDebug() << "SQLite 数据库打开成功";
// 3. 创建表(不存在则创建)
QSqlQuery query(db);//绑定db数据库
//有3列数据,id,name,age
QString createTable = R"(
CREATE TABLE IF NOT EXISTS user(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
)";
if (!query.exec(createTable))
{
qDebug() << "建表失败:" << query.lastError().text();
return false;
}
// 4. 插入数据
query.prepare(" INTO user(name, age) VALUES (:name, :age)");
query.bindValue(":name", "张三");
query.bindValue(":age", 22);
query.exec();
return true;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QSqlQuery query(db);
query.exec("SELECT * FROM user");
while (query.next())
{
int id = query.value("id").toInt();
QString name = query.value("name").toString();
QString age = query.value("age").toString();
qDebug()<<name+" "+age;
ui->label->setText(name+" "+age);
}
}
浙公网安备 33010602011771号