前言

很长时间没有使用QT中的sqlite了,在此记录下使用过程,并且对出现的一些棘手问题进行举例解决,对初学者提供帮助,少走弯路。下面首先过一遍qt5中SQLite的使用步骤,接着再对出现的问题进行解析。

一、Sqlite的使用场景

在日常我们对于一些数据量不大的工程,不一定非要使用mysql,Sqlite相对而言更加简单高效,比如我做的工程只需要储存设备名称与id,并且数量不多,sqlite已经足够使用,而且qt5自带sqlite的类,用起来很便捷。

二、使用步骤

1.引入SQlite模块

在pro文件中添加如下

QT       += sql

附上我的日常操作,顺便在pro文件中添加防止中文乱码的语句

本人实测这种方式在QT5中最好用

QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8

2.在头文件中添加需要的头文件

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

3.创建并且打开数据库

MyDataBase是我们自己定义的数据库文件名称,一般自动储存在工程的主文件夹中

    //数据库初始化-建立并打开数据库
    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QSQLITE","MyDataBase.db");
    database.setDatabaseName("MyDataBase.db");

    if (!database.open())
    {
        qDebug() << "Error: Failed to connect database." << database.lastError();
    }
    else
    {
        qDebug() << "Succeed to connect database." ;
    }

提示:在这个环节中,这个语句既可以新建数据库文件使用,也可以在数据库文件存在后,打开现有的数据库文件使用

4.创建表格

Addres是我们自己定义的表格名称,括号中使我们需要定义的表头类型与名称:例如id int primary key中id是名称,int primary key是类型

    QSqlQuery sql_query(database);           //定义数据库表格类
    sql_query.exec("create table Addres(id int primary key, name varchar);");

提示:sql_qurey(database),这个语句中有其他的博主没有加数据库名称,但是我建议加上,直接锁定数据库,避免不必要的麻烦

4.数据操作

 //插入数据
 sql_query.exec( "insert into Addres values( 1, '设备1')" );

 //修改数据
 sql_query.prepare("update Addres set name = :name where id = 1");
 sql_query.bindValue(":name", ui->lineEdit_8->text());

 //查询数据,对表格进行遍历
 sql_query.exec("select * from Addres");
 if(!sql_query.exec())
 {
     qDebug()<<sql_query.lastError();
 }
 else
 {
     while(sql_query.next())
     {
         id = sql_query.value(0).toInt();
         QString name = sql_query.value(1).toString();
     }
 }

 //删除数据
 sql_query.exec("delete from Addres where id = 1");

 //删除表格
 sql_query.exec("drop table Addres")//关闭数据库
 database.close();

问题描述

sql_query.exec("update Addres set name = \"设备1\" where id = 1");

如果我们在上述修改数据库语句中使用此语句,当名称变换类型或者多次修改就会报错:
错误类型为

QSqlError("", "Unable to fetch row", "No query")

报错原因是识别不到表格,,修改也就无法完,最好使用我推荐的修改语句,亲测使用数次没有问题

还有就是每次在使用完表格后要记得进行如下操作,将表格关闭,下次再用再次开启即可,避免在一些不必要的错误上浪费时间

sql_query.finish();
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐