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打开中文路径数据文件失败解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卢伟冰:小米欧洲市场份额达20% 和三星
- 下一篇: 早报:小鹏P7i有望今年三月上市 佳明新