QT 数据库学习笔记QT操作SQLite数据库

Posted 火山上的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 数据库学习笔记QT操作SQLite数据库相关的知识,希望对你有一定的参考价值。



QT 其它文章请点击这里:     QT 学习笔记


一、概念

SQLite 是一个c语言库,实现了一个小型、快速、自包含、高可靠性、全功能的SQL数据库引擎。 SQLite是世界上使用最多的数据库引擎。 SQLite内置在所有手机和大多数电脑中,并与人们每天使用的无数其他应用程序绑定在一起。

二、实例

用一个操作实例来展示简单的创建数据库、插入数据,删除数据、查询数据及修改数据:

#include <QCoreApplication>
#include <QDebug>
#include <QStringList>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

bool testSQLCommonOPeration()
{
    ///--创建一个SQLite数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //数据库连接命名
    db.setDatabaseName("myDatabase.db");
    //打开数据库
    if(!db.open()) {
        qDebug() << "错误: 连接数据库失败!" << db.lastError() << "\\n";
    }
    else {
        qDebug() << "成功连接数据库!\\n" ;
    }

    ///--以下执行相关sql语句
    //创建表格
    QSqlQuery query;
    //新建student表,id设置为主键,还有一个name项
    if(!query.exec("create table student(id int primary key, name varchar, age int)")) {
        qDebug() << "错误:不能创建表"<< query.lastError()<< "\\n";
    } else {
        qDebug() << "创建表成功!\\n";
    }

    qDebug() << "----------【增】----------";
    //向表中插入3条记录
    if(!query.exec("insert into student values(1,'张三',21)")) {
        qDebug() << "插入失败" << query.lastError();
    } else {
        qDebug() << "插入 <<1,'张三',21>>" ;
    }

    if(!query.exec("insert into student values(2,'李四',23)")) {
        qDebug() << "插入失败" << query.lastError();
    } else {
        qDebug() << "插入 <<2,'李四',23>> " ;
    }

    if(!query.exec("insert into student values(3,'王五',20)")) {
       qDebug() << "插入失败\\n" << query.lastError() << "\\n";
    }
    else {
        qDebug() << "插入 <<3,'王五',20>> \\n" ;
    }

    qDebug() << "----------【查】----------";
    //查寻所有,并打印
    if(!query.exec("select * from student")) {
        qDebug()<< "查询失败!" << query.lastError() << "\\n";
    }
    else {
        qDebug()<<"查询所有的值:";
        while(query.next()) {
            int id = query.value(0).toInt();
            QString name = query.value(1).toString();
            int age = query.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

    //查找表中id >=2 的记录的值
    if(!query.exec("select id,name,age from student where id >= 2")) {
        qDebug()<< "查询指定id失败!" << query.lastError() << "\\n";
    }
    //query.next()指向查找到的第一条记录,然后每次后移一条记录
    else {
        qDebug()<< "\\n查询ID大于等于2值:";
        while(query.next())
        {
            int id = query.value(0).toInt();
            QString name = query.value(1).toString();
            int age = query.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

    qDebug() << "\\n----------【删】----------";
    query.exec("delete from student where id=3"); //删除3 再次查询,发现王五已经被删除了
    //查寻所有,并打印
    if(!query.exec("select * from student")) {
        qDebug()<< "查询失败!" << query.lastError() << "\\n";
    }
    else {
        qDebug()<<"删除id等于3后,再打印!";
        while(query.next()) {
            int id = query.value(0).toInt();
            QString name = query.value(1).toString();
            int age = query.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

    qDebug() << "\\n----------【改】----------";
    //修改数据
    query.exec("update student set name = '小明' where id = 2");
    //查寻所有,并打印
    if(!query.exec("select * from student")) {
        qDebug()<< "查询失败!" << query.lastError() << "\\n";
    }
    else {
        qDebug()<<"修改id等于2的名字,再打印!";
        while(query.next()) {
            int id = query.value(0).toInt();
            QString name = query.value(1).toString();
            int age = query.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

    return true;
}

void testSQLDrivers() //测完qtsql模块都支持哪些数据库驱动
{
    qDebug() << "qtsql模块支持的数据库驱动";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
        qDebug() << driver;
    qDebug() << "\\n";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	//测试驱动
    //testSQLDrivers();

	//测试数据库建立、插入、查询、删除操作
    testSQLCommonOPeration();
    
    return a.exec();
}

打印如下:

数据库驱动测试打印结果如下:

生成的数据库文件:

三、可视化工具打开数据库

打开 SQLiteStudio 工具,按照以下步骤操作:

打开生生成的数据库:

打开后如下:


QT 其它文章请点击这里:     QT 学习笔记


以上是关于QT 数据库学习笔记QT操作SQLite数据库的主要内容,如果未能解决你的问题,请参考以下文章

QT 数据库学习笔记QT操作SQLite数据库

43.QT-访问远程SQLite数据库

QT学习笔记(16) QT5的数据库操作

qt操作sqlite 如何使用vacuum命令?

qt对sqlite数据库多线程的操作

qt对sqlite数据库多线程的操作