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:中文路径的支持

  • 相关阅读:
    Python函数篇(7)-正则表达式
    Python函数篇(6)-常用模块及简单的案列
    Python函数篇(5)-装饰器及实例讲解
    Android 涂鸦最佳实践
    事件总线框架---Otto
    Android App补丁更新
    Android实现换肤功能(二)
    Android实现换肤功能(一)
    网络请求框架---Volley
    注解框架---AndroidAnnotations
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469997.html
Copyright © 2011-2022 走看看