QT5中SQlite的常见问题(QSqlError(““, “Unable to fetch row“, “No query“)问题解决)
前言很长时间没有使用QT中的sqlite了,在此记录下使用过程,并且对出现的一些棘手问题进行举例解决,对初学者提供帮助,少走弯路。下面首先过一遍qt5中SQLite的使用步骤,接着再对出现的问题进行解析。一、Sqlite的使用场景在日常我们对于一些数据量不大的工程,不一定非要使用mysql,Sqlite相对而言更加简单高效,比如我做的工程只需要储存设备名称与id,并且数量不多,sqlite已经足够
前言
很长时间没有使用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();
更多推荐
所有评论(0)