日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

21IC電子網(wǎng) | 芯聞號

sqlite學(xué)習(xí)筆記之sqlite3_open函數(shù)的使用

充電吧
2019-01-15 10:12
關(guān)鍵字: sqlite
收藏


打開sqlite數(shù)據(jù)庫需要用到sqlite3_open函數(shù),但是sqlite3_open函數(shù)的第一個(gè)參數(shù)是數(shù)據(jù)庫文件的絕對路徑。它是有講究的,必須是utf8字符串。也就是說假如文件路徑是非utf8字符,就得轉(zhuǎn)為utf字符。于是參考網(wǎng)上的資料,寫了一個(gè)最常用的從多字節(jié)轉(zhuǎn)utf8的函數(shù),代碼如下:
//?編譯環(huán)境:VS?2008+sp1,Win7,?工程設(shè)置為多字節(jié)字符集
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;
	}


測試代碼如下:


//?編譯環(huán)境:VS?2008+sp1,Win7,?工程設(shè)置為多字節(jié)字符集
#include#includeint?main(void)
{
sqlite3*?db?=?0;
	char*?pszErrMsg?=?NULL;
	//?連接數(shù)據(jù)庫
????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,?"無法打開數(shù)據(jù)庫:?%s",?sqlite3_errmsg(db));
		return?1;
	}
??return?0;
}


參考文獻(xiàn):

1. sqlite3問題2:中文路徑的支持

相關(guān)推薦