【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创建的数据库,就可以直观地看到你创建、记录的数据了。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/spiremoon/article/details/106236832