今天用sqlite3访问中文路径的数据库文件,发现sqlite3_open函数返回失败,问度娘后,有网友建议sqlite3_open16打开,sqlite3_open16和sqlite3_open区别如下:

sqlite3_open16()的filename参数是UTF-16编码。

sqlite3_open()的filename参数时UTF-8编码。

换成sqlite3_open16()后,确实能打开,但后续的sqlite3_prepare_v2函数返回SQLITE_ERROR错误,找了很多方法都不行。最后从《sqlite中文路径非常规解决方案》找到一个很不错的方法,即把主程序所在目录设置为当前目录,sqlite的数据库文件以主程序所在目录的相对路径访问。一般的库,如:MFC、qt都有类似的方法,如qt的QDir::setCurrent函数,如下:

int main(int argc, char *argv[])
{QApplication a(argc, argv);// 设置当前目录为主程序exe所在目录,其中CHelper::getModuleDir()返回主程序exe目录QDir::setCurrent(CHelper::getModuleDir());.....  // 其它代码}

访问slite数据的代码如下:

bool CSqliteDB::openDB()
{int result = sqlite3_open("./database/HyDraPressTrainStudy.s3db", &m_pDb);if (result == SQLITE_OK){m_bIsOpen = true;return true;}m_bIsOpen = false;return false;
}

sqlite3的db文件存放路径为:D:\work\SoftwareAbout\我的项目\HyDraPressTrainStudy\x64\Debug\database\HyDraPressTrainStudy.s3db

而主程序exe所在目录路径为:D:\work\SoftwareAbout\我的项目\HyDraPressTrainStudy\x64\Debug,这也就是上面的CHelper::getModuleDir()返回的目录路径。

通过设置当前目录为D:\work\SoftwareAbout\我的项目\HyDraPressTrainStudy\x64\Debug,再通过在openDB()中相对路径访问就可以成功了,当然相对路径中不能再包含中文,否则依然不会成功。

直接如下访问会失败:

sqlite3_open("D:\\work\\SoftwareAbout\\我的项目\\HyDraPressTrainStudy\\x64\\Debug\\database\\HyDraPressTrainStudy.s3db", &m_pDb);

另外如下方法也可以:

《sqlite3打开带有中文名称的路径的文件》

sqlite3打开中文路径数据文件失败解决方法相关推荐

  1. Keil5 生成bin文件失败解决方法

    Keil5 生成bin文件失败解决方法 如何生成.bin文件 打开工程Options for Target -> User 勾选Run #1,并添加如上图代码 "$KARM\ARMCC ...

  2. RAC环境创建本地数据文件的解决方法

    RAC环境创建本地数据文件的解决方法: 思路如下: 1.数据文件 offline 2.通过RMAN 将数据文件拷贝到存储 3.alter database  rename  file 将本地文件路径修 ...

  3. win7双击计算机 出现windows无法访问指定设备,win7系统提示“Windows无法访问指定设备路径或文件”的解决方法...

    ‍ 为什么在win7系统上点击桌面图标提示"Windows无法访问指定设备路径或文件,您可能没有合适的权限访问",这是为什么?这是因为你的C盘是NTFS格式的,所以这个时候只要给账 ...

  4. SVN地址正确,能在网页打开,但是检出失败解决方法

    SVN地址正确,能在网页打开,但是检出失败解决方法 参考文章: (1)SVN地址正确,能在网页打开,但是检出失败解决方法 (2)https://www.cnblogs.com/zzd0916/p/76 ...

  5. ORA-01157 无法标识锁定数据文件的解决方法

    ORA-01157 无法标识锁定数据文件的解决方法 参考文章: (1)ORA-01157 无法标识锁定数据文件的解决方法 (2)https://www.cnblogs.com/huangbiquan/ ...

  6. vim 编辑器 打开GB2312、GBK文件乱码解决方法

    vim 编辑器 打开GB2312.GBK文件乱码解决方法 参考文章: (1)vim 编辑器 打开GB2312.GBK文件乱码解决方法 (2)https://www.cnblogs.com/suibbe ...

  7. VMware报错“锁定文件失败“解决方法

    VMware报错"锁定文件失败"解决方法 参考文章: (1)VMware报错"锁定文件失败"解决方法 (2)https://www.cnblogs.com/cb ...

  8. 【wps】删除文件失败-解决方法

    在wps中想要删除一个pdf文件,一直显示删除文件失败 解决:跳转到wps网盘,也就是电脑中的位置,在这里删除就可以了

  9. RAC环境下创建本地数据文件的解决方法

    引用收藏:http://blog.itpub.net/501889/viewspace-1083311/ 同事不小心,在RAC环境下创建了本地数据文件,这个肯定会出问题的,节点2不能访问此数据文件.其 ...

最新文章

  1. 亚马逊马超:如何使用DGL进行大规模图神经网络训练?
  2. Linux - Ubuntu
  3. PHP计划任务:如何使用Linux的Crontab执行PHP脚本
  4. windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
  5. boost::movelib::unique_ptr相关用法的测试程序
  6. 基本概念—机器学习ML与深度学习DL
  7. awk或者sed识别和替换数据中最后一列的缺失值(转载)
  8. 在现有的python环境下创建另一个python版本【亲测有效】
  9. Linq(拓展方法+select())
  10. Python可视化库matplotlib(基础整理)
  11. 个人简历小程序前端源码
  12. C# winform 上传文件 (多种方案)
  13. 初识——信息安全等级保护
  14. linux yum libsasl2,CentOS8 yum 凡是安装 安装mysql +需要:libsasl2.so.2()(64bit)
  15. javaweb实训第五天下午——SpringMVC基础
  16. jedis 连接池使用流程图
  17. Json类型的转化 及 JsonArray,JsonObject详解
  18. Kepware OPC与服务器通讯
  19. python输入直角三角形_如何用python做出直角三角形和其形成的锥形
  20. 微博开放平台注册应用

热门文章

  1. 值得一看的PCB接地设计规范!
  2. VHDL实现打地鼠游戏设计
  3. 为什么matlab显示error,【求救】我安装了资源 MATLAB R2012b 后,显示有error……
  4. libsvm工具箱会和matlab,MATLAB实现多分类和libsvm工具箱的安装使用详解
  5. linux数据库实例开机启动不了,linux下Oracle数据库实例开机自启动设置
  6. arcgis引用样式无符号_【技术积累】arcgis制图应用:符号制作
  7. XSS介绍_靶场DVWA,pikachu;其他XSS平台
  8. sqli-labs less11 POST注入-字符型
  9. linux源码安装php缺少动态库,php源代码安装常见错误解决办法
  10. Oracle 左连接、右连接、全外连接、(+)号作用