【Qt】操作SQLite数据库

SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。Qt为SQLite操作提供了相应的接口,可以使我们在程序能轻松完成对SQLite数据库的创建、删除、插入、改写、查找等操作。
下面以一个小例子说明Qt操作SQLite数据库。

一.简单界面

在这里插入图片描述
写一个简单的页面,用于测试打开数据库、建表、插入、读表操作。

二.源码

主要的注释都写在了源码中,不难发现Qt对SQLite操作的关键就是组一条符合SQLite语法的命令,然后调用sql_q->exec(QString)运行之。SQLite的具体语法可见https://www.cnblogs.com/suzhen-2012/p/9955595.html,虽然本例程中未全涉及到增删改查,但实现原理都是一样的。
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QSqlDatabase db;				//数据库,用于打开一个数据库
    QSqlQuery *sql_q = NULL;        //SQL数据库操作类,用于操作数据库

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开数据库
void MainWindow::on_pushButton_clicked()
{
    db = QSqlDatabase::addDatabase("QSQLITE");      //参数说明库类型为SQLite
    db.setDatabaseName("MyDataBase.db");            //设置库名
    if (!db.open())									//打开库,如果不存在将会自动创建
    {
        qDebug() << "Error: Failed to connect database." << db.lastError();
    }
    else
    {
        qDebug() << "Succeed to connect database." ;
        sql_q = new QSqlQuery(db);                  //实例化数据库操作类,参数很关键,必须是之前打开过的数据库,此处为db
    }
}

//打开表
void MainWindow::on_pushButton_2_clicked()
{
    QString cmd;                                    //SQL指令,下面进行组指令
    cmd += "create table if not exists ";           //组入“如果不存在,就创建表”的指令
    cmd += ui->lineEdit->text();                    //组入表名
    cmd += "(id INTEGER PRIMARY KEY autoincrement,姓名 TEXT,年龄 int)";//组入表头
    qDebug()<<cmd;
    if(!sql_q->exec(cmd))                           //执行
    {
        qDebug() << "Error: Fail to create table."<< sql_q->lastError();
    }
    else
    {
        qDebug() << "Table opened!";
    }
}

//插入一行
void MainWindow::on_pushButton_3_clicked()
{
    QString cmd;
    cmd += ("insert into ") + ui->lineEdit->text();
    cmd += " (姓名,年龄)";
    cmd += " values(" ;
    cmd += '"' + ui->lineEdit_2->text() + '"' + "," + ui->lineEdit_3->text() + ")";
    qDebug()<<cmd;
    if(!sql_q->exec(cmd))                           //执行
    {
        qDebug() << "Error: Fail to insert."<< sql_q->lastError();
    }
    else
    {
        qDebug() << "insert success!";
    }
}

//显示所选表所有内容
void MainWindow::on_pushButton_4_clicked()
{
    QString cmd;
    //选表
    cmd += "select * from ";
    cmd += '"' + ui->lineEdit->text() + '"';
    if(!sql_q->exec(cmd))                           //执行
    {
        qDebug() << "Error: Fail to select."<< sql_q->lastError();
    }
    else
    {
        qDebug() << "select success!";
    }

    while(sql_q->next())
    {
        qDebug()<<"id:"<<sql_q->value(0).toString()<<"  姓名:"<<sql_q->value(1).toString()<<"  年龄:"<<sql_q->value(2).toInt();
    }
}

三.运行测试

运行程序后,先打开数据库,然后创建名为"一班"的表,然后插入三个学生,最后读取该表,看是否插入成功。
调试信息栏如下所示,说明运行正确

Succeed to connect database.
"create table if not exists 一班(id INTEGER PRIMARY KEY autoincrement,姓名 TEXT,年龄 int)"
Table opened!
"insert into 一班 (姓名,年龄) values(\"aaa\",18)"
insert success!
"insert into 一班 (姓名,年龄) values(\"bbb\",19)"
insert success!
"insert into 一班 (姓名,年龄) values(\"ccc\",20)"
insert success!
select success!
id: "1"   姓名: "aaa"   年龄: 18
id: "2"   姓名: "bbb"   年龄: 19
id: "3"   姓名: "ccc"   年龄: 20

然后再随意创建几个表,随意插入几个学生,最后用数据库软件打开Qt创建的数据库,就可以直观地看到你创建、记录的数据了。
在这里插入图片描述

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜老越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值