zoukankan      html  css  js  c++  java
  • sqlite学习笔记之sqlite3_open函数的使用

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

           打开sqlite数据库需要用到sqlite3_open函数,但是sqlite3_open函数的第一个参数是数据库文件的绝对路径。它是有讲究的,必须是utf8字符串。也就是说假如文件路径是非utf8字符,就得转为utf字符。于是参考网上的资料,写了一个最常用的从多字节转utf8的函数,代码如下:

    // 编译环境:VS 2008+sp1,Win7, 工程设置为多字节字符集
    std::string MbcsToUtf8( const char* pszMbcs )
    	{
    		std::string str;
    		WCHAR   *pwchar=0;
    		CHAR    *pchar=0;
    		int len=0;
    		int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
    		len=MultiByteToWideChar(codepage, 0, pszMbcs, -1, NULL,0);
    		pwchar=new WCHAR[len];
    		if(pwchar!=0)
    		{
    			len = MultiByteToWideChar(codepage, 0, pszMbcs, -1, pwchar, len);
    			if( len!=0 )
    			{
    				len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, 0, 0, 0, 0);
    				pchar=new CHAR[len];
    				if(pchar!=0)
    				{
    					len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, pchar, len,0, 0);
    					if(len!=0)                
    					{
    						str = pchar;                   
    					}
    					delete pchar;
    				}
    				delete pwchar;
    			}
    		}
    		return str;
    	}

    测试代码如下:

    // 编译环境:VS 2008+sp1,Win7, 工程设置为多字节字符集
    #include <sqlite3.h>
    #include <string>
    
    int main(void)
    {
    sqlite3* db = 0;
    	char* pszErrMsg = NULL;
    	// 连接数据库
        std::string strImgIndexFileName = “C:\test.db”
    	std::string strUtf8File = MbcsToUtf8(strImgIndexFileName.c_str());
    	int ret = sqlite3_open(strUtf8File.c_str(),&db);
    	if ( ret != SQLITE_OK )
    	{
    		fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db));
    		return 1;
    	}
      return 0;
    }
    

    参考文献:

    1. sqlite3问题2:中文路径的支持

  • 相关阅读:
    WPF游戏摘记地图编辑器(1)
    图片和视频操作核心代码
    WPF游戏摘记地图编辑器(2)
    序言
    Asp.Net 请求处理机制
    C#正则表达式
    ActiveX控件打包成Cab实现浏览器自动下载安装
    ios数据存储
    ARC 学习
    Ray's Learn Cocos2d 笔记(一)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469997.html
Copyright © 2011-2022 走看看