日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite3打开中文路径数据文件失败解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天用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打开中文路径数据文件失败解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。