• <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>

            牽著老婆滿街逛

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

            關于SQLite

            最近在項目中用到了SQLite。主要是客戶端用到,這種小型內嵌數據庫還是蠻實用的。

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

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

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

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

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

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

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

            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將輸入的字符串全都轉換為UTF8。用UTF8ToAnis將所有輸出的字符串全部都轉化為多字節字符。


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

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

            国产综合久久久久久鬼色| 色综合久久综合中文综合网| 久久精品视频网| 国产成人无码精品久久久久免费| 9999国产精品欧美久久久久久| 亚洲精品成人网久久久久久| 久久亚洲AV成人出白浆无码国产| 亚洲综合婷婷久久| 综合人妻久久一区二区精品| 99久久精品九九亚洲精品| 日韩欧美亚洲综合久久 | 青青青国产成人久久111网站| 久久精品18| 一本伊大人香蕉久久网手机| 亚洲精品美女久久久久99| 久久国产香蕉一区精品| 国产精品一久久香蕉产线看| 波多野结衣久久精品| 中文字幕成人精品久久不卡| 无码超乳爆乳中文字幕久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国色天香久久久久久久小说| 办公室久久精品| 国产精品对白刺激久久久| 亚洲国产精品嫩草影院久久 | 国产无套内射久久久国产| 久久久久免费看成人影片| 狠狠色丁香婷婷久久综合五月| 久久99精品久久久久久噜噜| 中文字幕一区二区三区久久网站| 久久婷婷五月综合97色| 久久丫精品国产亚洲av不卡 | 久久久亚洲精品蜜桃臀| 国产农村妇女毛片精品久久| 国产国产成人久久精品| 久久不见久久见免费影院www日本| 国产一区二区三区久久精品| 青青草原综合久久大伊人精品| 曰曰摸天天摸人人看久久久| 精品久久久久久无码人妻热 | 高清免费久久午夜精品|