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打开之后
- 给表添加数据
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