前端之家收集整理的这篇文章主要介绍了
sqlite3实现中文路径sql文件导入另类解决方法,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1.需求
程序要实现产品离线数据下载,故采用java端直接拼接sql文件,客户端下载sql文件,合并到本地数据库。性能还行局域网十几秒7兆多,但是存在一个sqlite或sql文件保存在中文路径下无法合并的问题
主要原因是因为sqlite打开数据库时使用utf8打开,qt普遍采用unicode编码。网上方法较多,这里采用另外一种方法解决,采用相对路径避开中文路径的问题
@H_
403_13@QString strdbpath(QDir::currentPath() +
"/db");
QDir
dir(
"");
dir.mkpath(strdbpath);
strdbpath +=
"/MysqLite.db";
Q
sqlDatabase dbset = Q
sqlDatabase::addDatabase(
"QsqlITE",
"file");
dbset.setDatabaseName(strdbpath);
if (!dbset.open()) {
LOG_ALL_ERROR(QStringLiteral(
"Failed open MysqLite.db"));
return bret;
}
@H_
403_13@std::
string strstdcmd(
"sqlite3.exe ./db/MysqLite.db \".read ./db/MysqLite.sql\"");
QProcess
process;
process.start(strstdcmd.c_str());
process.waitForFinished();
String str
sqlpath(QDir::currentPath() +
"/db/MysqLite.sql");
QFile::remove(str
sqlpath);
3.下载sql文件部分略用libcurl很容易也很快下载文件
4.备注
1.代码在win7+vs2010+qt5.40+libcurl 7.36.0下编译通过
2.编译或直接下载sqlite3.exe在生成目录和源码目录分别存放一份
3.常识currentPath在编译时是指源码目录,直接运行exe指exe所在目录
原文链接:https://www.f2er.com/sqlite/199398.html