前段時間忽然使用sqlite3開發,中間須要用中文,XE的缺省char*直接使用中文,在sqlite *.db3的數據庫表格中顯示是亂碼,用數據庫管理器來瀏覽等管理時很是不便。
因而決定仍是使用utf-8的String數據類型,但在sqlite的API中,輸入字符串參數均爲char*,直接使用String是編譯通不過的,在csdn,谷哥,度娘等搜索,不知道是關鍵字沒設置好仍是什麼,說的都不得要領,後來找到有人會寫一段程序,用逐個字符翻譯的方式轉換,我心不甘,因而試了幾天,試出一個更加簡便的方式,列出給各位。
我使用的編譯器是RAD XE, Sqlite版本3.7.9, 數據庫管理器是sqlite expert 3.3.52。
直接使用字符串,因爲編譯爲GBK,致使管理器瀏覽出來是亂碼。
int iRet;
sqlite3 *psqlite3;
char *pQuery, *pErrMsg;
iRet = sqlite3_open( "c:\\test.db3", &psqlite3 );
pQuery = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'GBK中文', '直接使用char類型' );";
iRet = sqlite3_exec( psqlite3, pQuery, NULL, NULL, &pMsg );
sqlite3_close( psqlite3 );
而當使用String類型,在以下轉換後, sqlite expert正常顯示中文,代表使用了utf-8編譯成功.
int iRet;
sqlite3 *psqlite3;
char *pQuery, *pErrMsg, QueryBuf[512];
String strUtf8;
RawByteString strRaw;
strUtf8 = "INSERT INTO table1 (idno,user,pass) VAULES( 1, 'Utf8中文', '使用String類型再轉' );";"
strRaw = UTF8Encode(strUtf8);
strcpy( QueryBuf, strRaw.c_str() );
iRet = sqlite3_open( "c:\\test.db3", &psqlite3 );
iRet = sqlite3_exec( psqlite3, QueryBuf, NULL, NULL, &pMsg );
sqlite3_close( psqlite3 );
測試後看,utf-8格式顯示中文成功。
這裏的關鍵是,把String類型utf-8,使用UTF8Encode系統函數,轉換成RawByteString,而後使用RawByteString類型的成員函數c_str(),可轉換成char*類型,而內容是utf-8格式的,這樣在傳進sqlite api後,可正常做爲utf-8的內容。sql