美文网首页C++
6.QT连接sqlite数据库--Apple的学习笔记

6.QT连接sqlite数据库--Apple的学习笔记

作者: applecai | 来源:发表于2021-07-11 16:39 被阅读0次

一,前言

最近看了下架构的演变,从独立式->MCV->SOA->微服务。而我现在做个单机版的工具的话,顶多用到数据库和多线程,我的小工具应该会选MCV架构。将来有必要再扩展以太网联机多人操作功能。那么这都需要用到数据库。

二,常用数据库软件选型

10年前我对SQL语法还是很熟悉的,主键,外键等都很清晰,但是当时用的是access。现在基于win10的SQL可视化软件有哪些呢!网上搜索了下mysql和sqlite用的多。但是mysql的可视化编辑器免费版本少。所以我折腾了下,也算是安装完成了。
于是用QT连接mysql,结果显示驱动不可用。我网上搜索了下,也有解决方案,但是比较麻烦。所以我选用sqlite,QT已经集成的,只是sqlite的可视化工具我一开始没找到,后来折腾了下找到了SQlite Expert Personal是个人免费版,已经满足我的编辑及可视化要求了。
那么QT连接数据库,最终我选择轻量级的Sqlite数据库,它不需要连接,直接是个db文件。

三,QT数据库方法API

void Widget::initDB()
{
    //建立并打开数据库
    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QSQLITE");
    qDebug()<<QApplication::applicationDirPath();
    database.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "testApple.db");
    if (!database.open())
    {
        qDebug() << "Error: Failed to connect database." << database.lastError();
    }
    else
    {
        qDebug() << "Succeed to connect database." ;
    }

    //创建表格
    QSqlQuery sql_query;
    //先清空一下表,可按需添加此句
    sql_query.exec("DROP TABLE student");
    //创建表格student
    if(!sql_query.exec("create table student(UserId int primary key, UserName text, PassWord text)"))
    {
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }
    else
    {
        qDebug() << "Table created!";
    }
    // 填充表
    if(!sql_query.exec("INSERT INTO student VALUES(1, 'AppleCai', '23')"))
    {
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }
    else
    {
        qDebug() << "add one created!";
    }
    // 批量填充表
    QStringList names;
    names<<"小A"<<"小B"<<"小C"<<"小D"<<"小E"<<"小F"<<"小G"<<"小H"<<"小I";

    QStringList password;
    password<<"11"<<"12"<<"13"<<"21"
             <<"22"<<"23"<<"31"<<"32"<<"33";
    // 绑定关键字后才能进行操作
    sql_query.prepare("INSERT INTO student (UserId, UserName,PassWord) "
                      "VALUES (:UserId, :UserName, :PassWord)");
    qint8 i=0;
    foreach (QString name, names)       //从names表里获取每个名字
    {
        sql_query.bindValue(":UserId", i+2);                      //向绑定值里加入名字
        sql_query.bindValue(":UserName", name);      //成绩
        sql_query.bindValue(":PassWord", password[i] );    //班级
        if(!sql_query.exec())
        {
            qDebug() << "Error: Fail."<< sql_query.lastError();
        }

        i++;
    }
    // 读取sqlite
    studentInfo tmp;
    QVector<studentInfo> infoVect; //数据库缓存
    sql_query.exec("SELECT * FROM student WHERE UserId >= 5 AND UserId <= 9;");
    while(sql_query.next())
    {
        tmp.UserId = sql_query.value(0).toInt();
        tmp.UserName = sql_query.value(1).toString();
        tmp.PassWord = sql_query.value(2).toString();
        qDebug()<<tmp.UserId<<tmp.UserName<<tmp.PassWord;
        infoVect.push_back(tmp);
    }
    qDebug("done");

    //更改表中数据
    sql_query.prepare("UPDATE student SET PassWord='admin' WHERE UserName='AppleCai'");
    if(!sql_query.exec())
    {
        qDebug() << "Error: Fail."<< sql_query.lastError();
    }

    //删除表中数据
    sql_query.prepare("DELETE FROM student WHERE UserName='小H'");
    if(!sql_query.exec())
    {
        qDebug() << "Error: Fail."<< sql_query.lastError();
    }

}

四,效果

image.png

五,小结

数据库环境搭建成功,QT访问sqlite数据的基本方法算是掌握了。QT数据库已入门。

相关文章

网友评论

    本文标题:6.QT连接sqlite数据库--Apple的学习笔记

    本文链接:https://www.haomeiwen.com/subject/ipikpltx.html