QT语言笔记-Sqlist数据库

1.vs环境下,添加#include <QtSql> 头文件报错

 

 

2.Sqlite数据库操作

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  //创建数据库连接

db.setDatabaseName("C:\Users\zechen.li\Desktop\VinTool\VinTool\VinTool\Sqlist\VinToolSql.db"); //连接数据库

if (!db.open()) //判断数据库是否打开

{

//没有数据库文件则创建文件

qDebug() << "数据库文件打开失败";

qDebug() << db.lastError().text();//输出错误信息

}

QSqlQuery query;   //定义QSqlQuery 需放到db打开之后

  1. 给表添加数据
query.bindValue(":Model", *it);  //在列名为Model出插入*it

query.bindValue(":Year", *itt);  //在列名为Year出插入*itt

query.exec();     //执行上方语句 执行这一句话,插入才成功

3.Qt sqlite driver not load

将qt的qsqlite.dll文件放到执行程序的.exe文件的目录下(文章最下方,百度网盘获取dll文件)

 

.dll文件是根据使用的哪种数据库

4.QSqlQuery::prepare: database not open

db = QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName("C:/Users/zechen.li/Desktop/VinTool/VinTool/VinTool/Debug/VinToolSql.db");



if (!db.open())

{

//没有数据库文件则创建文件

qDebug() << "open failed";

qDebug() << db.lastError().text();//输出错误信息

}

else

{

qDebug() << "open success";

}



qDebug() << "sql drivers" << QSqlDatabase::drivers();

QSqlQuery query;

query.prepare("INSERT INTO VinCodeTable(Model,Year,Vin) VALUES(:Model,:Year,:Vin)");

QSqlQuery类 query的定义需要在QSqlDatabase db打开文件之后

db文件打开后,再定义QSqlQuery,否则会因为没有打开db文件而导致database没有打开的问题

5.Sqlite数据库提高插入数据效率:事务

由于query.exec()执行数据库语言的方法插入数据,因此放到循环中,会打开数据库->插入数据->关闭数据库,因此开关操作会影响插入数据的效率,因此提出事务操作,原理是数据库管理系统首先把要执行的数据库语句存储到内存中,调用commit方法之后再一次性全部执行所有内存中的数据库,相当于将插入的数据存到内存,然后再执行数据库语句,从而减少开关数据库所损耗的时间

query.prepare("INSERT INTO VinCodeTable(Model,Year,Vin) VALUES(:Model,:Year,:Vin)");

for (vector<QString>::iterator it=vctModel.begin();it!=vctModel.end();it++)

{



qDebug() << *it;

ReadVin(*it);



db.transaction();  //开始事务

qDebug() << "affair open";

for (map<QString, QString>::iterator it2 = mapVin_Year.begin(); it2 != mapVin_Year.end(); it2++)

{

query.bindValue(":Vin", it2->first);

query.bindValue(":Year", it2->second);

query.bindValue(":Model", *it);

query.exec();

}



db.commit();  //提交事务

qDebug() << "affair close";

}

6.Sqlite数据库问题:no such table (没找到该表)

可能原因1: sql语句不正确,导致找不到表,可检查sql语句的表名

可能原因2:数据文件没有正常打开,数据库路径不对,导致创建了空的 .db文件,从而找不到表格,如果在连接数据库的时候没有给绝对路径,在vs的工程文件路径上(.vcxproj)没有该数据库,就会自动生成一个数据库,数据库内为空,因此在连接数据库的时候,尽量使用绝对路径。

7.SQL语句大全

史上超强最常用SQL语句大全_小小张自由—>张有博的博客-CSDN博客

dll文件

链接:https://pan.baidu.com/s/1kPSZ9SNdKhRGp0cUjSAh2g?pwd=mqnb 
提取码:mqnb

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值