• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            關(guān)于SQLite

            最近在項目中用到了SQLite。主要是客戶端用到,這種小型內(nèi)嵌數(shù)據(jù)庫還是蠻實用的。

            提起SQLite我不自覺的就想起了微軟出的ACCESS。他們兩個確實是有可比性的。曾經(jīng),小型網(wǎng)站數(shù)據(jù)庫,ASP可以用到ACCESS。但是,PHP卻是沒有相對應(yīng)的解決方案,自從SQLite的出現(xiàn),給PHP提供了一個解決方案。

            在客戶端里面,我用到的數(shù)據(jù)保存方案有:CSV、INI、XML。其中XML是最強(qiáng)大的,但是可惜的是我用的解析器是Tinyxml,實用tinyxml的初衷就是簡單,只用于配置,所以再復(fù)雜的事情就有些應(yīng)付不過來。至少,邏輯上要復(fù)雜上許多。

            我最近,看了迅雷,搜狗……一些軟件的目錄,都有一個sqlite3.dll。于是就去了解了下。貌似現(xiàn)在很多的im軟件用這個做客戶端數(shù)據(jù)庫的也多起來了。看起來這個項目還是不錯的。

            SQLite有好幾種版本,如果要想內(nèi)嵌到應(yīng)用程序當(dāng)中去,那就要用sqlite-amalgamation這個版本了。它就是一個頭文件,一個c的實現(xiàn)文件,這個文件里面有十多萬行代碼。我用VS2003編譯的時候,編譯器會提醒我,行數(shù)有些超長了-_-!!

            C++里面對SQLite的包裝類庫里面,我覺得SOCI算是很不錯的,這個項目不僅僅是對SQLite進(jìn)行了包裝,而且對其他數(shù)據(jù)庫都有包裝,像MySQL、PostgreSQL、Oracle這些數(shù)據(jù)庫都支持,還支持ODBC。如果感興趣可以看我轉(zhuǎn)載的一篇博文:http://www.shnenglu.com/tx7do/archive/2009/11/27/102054.html

            “工欲善其事,必先利其器。”
            既然是數(shù)據(jù)庫,那我自然要有工具能夠編輯數(shù)據(jù)庫了。我找了找SQLite的數(shù)據(jù)庫工具,一搜一大把。我試用了好多種,都不是很好用。最終才確定了SQLite Expert Professional,這款商業(yè)軟件。當(dāng)然,我很無恥的用了破解版。破解版在www.gougou.com里面就能搜索到。我是傾向于用開源軟件的,但是很無奈的是,雖然相關(guān)的工具很多很多,但是就沒有一款真正好用的。

            我在用SQLite Expert創(chuàng)建數(shù)據(jù)庫的時候,發(fā)現(xiàn)有一個選擇編碼的選項,但是很可惜的是全部都是UTF系的編碼……我習(xí)慣性的選擇了UTF8,這個也是它的默認(rèn)選項。我創(chuàng)建了一個測試的數(shù)據(jù)庫,隨便弄了個表,打了幾個字,然后保存。再用VS2003做了一個測試程序,結(jié)果讀進(jìn)來的是亂碼。后來我把數(shù)據(jù)庫文件放到一個路徑里面有中文的路徑下,結(jié)果它找不到文件,看來它完完全全的使用了UTF字符,包括對路徑的處理。看起來,只能轉(zhuǎn)碼了。以下附上兩個Windows下的轉(zhuǎn)碼的方法:

            std::string UTF8ToAnsi( const std::string& strIn, std::string& strOut )
            {
                WCHAR
            * strSrc    = NULL;
                TCHAR
            * szRes    = NULL;

                
            int i = MultiByteToWideChar(CP_UTF8, 0, strIn.c_str(), -1, NULL, 0);

                strSrc 
            = new WCHAR[i+1];
                MultiByteToWideChar(CP_UTF8, 
            0, strIn.c_str(), -1, strSrc, i);

                i 
            = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);

                szRes 
            = new TCHAR[i+1];
                WideCharToMultiByte(CP_ACP, 
            0, strSrc, -1, szRes, i, NULL, NULL);

                strOut 
            = szRes;

                delete[] strSrc;
                delete[] szRes;

                
            return strOut;
            }


             

            std::string AnsiToUTF8( const std::string& strIn, std::string& strOut )
            {
                WCHAR
            * strSrc    = NULL;
                TCHAR
            * szRes    = NULL;

                
            int len = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strIn.c_str(), -1, NULL,0);

                unsigned 
            short* wszUtf8 = new unsigned short[len+1];
                memset(wszUtf8, 
            0, len * 2 + 2);
                MultiByteToWideChar(CP_ACP, 
            0, (LPCTSTR)strIn.c_str(), -1, (LPWSTR)wszUtf8, len);

                len 
            = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);

                
            char* szUtf8 = new char[len + 1];
                memset(szUtf8, 
            0, len + 1);
                WideCharToMultiByte (CP_UTF8, 
            0, (LPCWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);

                strOut 
            = szUtf8;

                delete[] szUtf8;
                delete[] wszUtf8;

                
            return strOut;
            }



            這兩個方法可能不能直接編譯過,有一些自己的東西,需要稍事修改。
            用AnisToUTF8將輸入的字符串全都轉(zhuǎn)換為UTF8。用UTF8ToAnis將所有輸出的字符串全部都轉(zhuǎn)化為多字節(jié)字符。


            引用:
            SQLite:http://www.sqlite.org/
            SOCI:http://soci.sourceforge.net/
            SQLite Expert Professional:http://www.sqliteexpert.com/

            posted on 2009-12-13 14:48 楊粼波 閱讀(1407) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            综合久久精品色| 国产精品久久网| 亚洲精品久久久www| 亚洲精品无码久久久久AV麻豆| 久久久久亚洲爆乳少妇无| 奇米影视7777久久精品人人爽| 久久99久久99精品免视看动漫| 亚洲中文字幕久久精品无码APP| 久久精品aⅴ无码中文字字幕不卡| 国产午夜精品久久久久免费视| 久久国产精品久久| 久久综合狠狠综合久久97色| 99久久精品免费看国产一区二区三区| 2021久久国自产拍精品| 久久99精品国产麻豆蜜芽| 国内精品综合久久久40p| 狠狠久久亚洲欧美专区| 亚州日韩精品专区久久久| 久久天天躁狠狠躁夜夜avapp| 国产精品亚洲综合专区片高清久久久| 久久中文字幕精品| 国产999精品久久久久久| 久久久久久久综合狠狠综合| 国产亚洲欧美成人久久片| 亚洲国产成人久久综合一区77| 97超级碰碰碰久久久久| 亚洲午夜福利精品久久| 久久婷婷国产麻豆91天堂| 99久久夜色精品国产网站| 久久精品国产亚洲网站| 久久人妻少妇嫩草AV无码蜜桃| 亚洲午夜无码久久久久| 久久亚洲欧洲国产综合| 97久久超碰国产精品2021| 少妇无套内谢久久久久| 狠狠精品干练久久久无码中文字幕 | 伊人久久综合热线大杳蕉下载| 久久久国产99久久国产一| 国产69精品久久久久9999| 99久久无码一区人妻a黑| 亚洲伊人久久精品影院|