加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3实现中文路径sql文件导入另类解决方法

发布时间:2020-12-12 19:40:14 所属栏目:百科 来源:网络整理
导读:1.需求 程序要实现产品离线数据下载,故采用java端直接拼接sql文件,客户端下载sql文件,合并到本地数据库。性能还行局域网十几秒7兆多,但是存在一个sqlite或sql文件保存在中文路径下无法合并的问题 2.解决 主要原因是因为sqlite打开数据库时使用utf8打开,

1.需求

程序要实现产品离线数据下载,故采用java端直接拼接sql文件,客户端下载sql文件,合并到本地数据库。性能还行局域网十几秒7兆多,但是存在一个sqlite或sql文件保存在中文路径下无法合并的问题

2.解决

主要原因是因为sqlite打开数据库时使用utf8打开,qt普遍采用unicode编码。网上方法较多,这里采用另外一种方法解决,采用相对路径避开中文路径的问题

3.代码片段

1.创建数据库
QString strdbpath(QDir::currentPath() + "/db");
    QDir dir("");
    dir.mkpath(strdbpath);
    strdbpath += "/mysqlite.db";
    QSqlDatabase dbset = QSqlDatabase::addDatabase("QSQLITE","file");
    dbset.setDatabaseName(strdbpath);
    if (!dbset.open()) {
        LOG_ALL_ERROR(QStringLiteral("failed open mysqlite.db"));
        return bret;
    }
2.合并sql文件到本地数据库
std::string strstdcmd("sqlite3.exe ./db/mysqlite.db ".read ./db/mysqlite.sql"");
    QProcess process;
    process.start(strstdcmd.c_str());
    process.waitForFinished();
    String strsqlpath(QDir::currentPath() + "/db/mysqlite.sql");
    QFile::remove(strsqlpath);
3.下载sql文件部分略用libcurl很容易也很快下载文件

4.备注

1.代码在win7+vs2010+qt5.40+libcurl 7.36.0下编译通过
2.编译或直接下载sqlite3.exe在生成目录和源码目录分别存放一份
3.常识currentPath在编译时是指源码目录,直接运行exe指exe所在目录

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读