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

  • 相关阅读:
    ElasticSearch「1」本地安裝Elasticsearch 6.0.1 + Elasticsearch-head插件
    HDFS Erasure Coding介绍
    Cassandra VS HBase
    Hadoop入门 【1】 下载源码,构建
    HBase ProcedureV2 分析
    github创建maven项目过程
    ruby, gem install 出现网络错误
    Ketama Consisent Hash
    [转]产品经理 书目录
    [算法]动态规划之最长公共子序列
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469997.html
Copyright © 2020-2023  润新知