CppSQLite3U使用小結,cppsqlite3u小結

來源:互聯網
上載者:User

CppSQLite3U使用小結,cppsqlite3u小結

CppSQLite3U是一個封裝好的MFC可以使用的操作sqlite3的類,之前自己寫過一部份,但是後來總覺得不夠成熟,總要去修改代碼,覺得不夠完善,索性就在網上找到了這個用了起來,用來一段時間後,發現還挺不錯的,duang的一下,效果就出來了,現在寫寫這篇文章,是要告訴你們,我可以這樣簡單方便的使用,在你看完我的介紹後,你也可以。

附件稍後上傳,總共有五個檔案

CppSQLite3U.cpp

CppSQLite3U.h

sqlite3.h

sqlite3.lib

sqlite3.dll

把.h和.cpp的檔案都添加進項目裡,.lib.dll放到項目根目錄,在項目設定link中Object/libiary modules中寫上sqlite3.lib,引入這個東西,當然寫在代碼中也是一樣的,只不過我忘了該怎麼寫,哈哈,有工具就要利用嘛

好了,這是初步載入方法,接下來再看怎麼使用,我只記錄下我使用過的,因為網上資料很多,介紹的很詳細,但是我用不到那麼多,我只是想寫一個簡單的本地化小工具而已,所以只記錄下簡單的使用方法,目的是為了方便後期自己使用時能夠快速查閱,因為工作原因,不怎麼用mfc了,幾個月下來早已經忘光了,只能以這種形式來記錄了。

1.     在需要引用的原始碼中include下CppSQLite3U.h,好像是廢話,不過自己確實都已經忘了代碼要這樣寫

2.     CppSQLite3DB db;//聲明

3.     db.open("資料庫名.db")  // sqlite資料庫檔案名

4. CppSQLite3Query query;

5.     query = db.execQuery("SQL語句");

6.     for(int i=0;i<query.numFields();++i){    //numFields()表示的是總列數,也就是總共有多少個欄位

            query.fieldName(i);   // fieldName(i)表示的是列名,也就是欄位名,可以在sql語句中使用  price AS 金額,這樣出來的就是欄位名,很方便

        }

7.     while(!query.eof()){

            query.eof();  // 當其為真表示到頭了後面沒有資料了

            query.getStringField();  //  參數可填列號或者欄位名繼而獲得欄位值

            query.nextRow();  // 跳轉到下一行資料

        }

8.     query.finalize();  //  釋放掉Query

9.     db.close();  //  關閉掉db;

需要注意的是這裡查詢後得到的資料,也就是getStringField();得到的資料,是utf8編碼的,因為我用的是vc6,vc6預設是ansi的,所以為亂碼,這裡有必要想辦法進行轉碼後再進行使用,我是自己寫了一個Convert函數來進行的,但是依然有些小問題沒能解決,但是不影響使用,此函數也貼上省得以後找的麻煩,實際上也是網上找的啦,- -!

/*使用方法:Convert(strA_in,strB_out,CP_UTF8,CP_ACP)//UTF8轉換ANSIConvert(strA_out,strB_in,CP_ACP,CP_UTF8)//ANSI轉換UTF8 */void Convert(const char *strIn, char *strOut, int sourceCodepage, int targetCodepage){       int len=lstrlen(strIn);       int unicodeLen=MultiByteToWideChar(sourceCodepage,0,strIn,-1,NULL,0);       wchar_t* pUnicode;       pUnicode=new wchar_t[unicodeLen+1];       memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));       MultiByteToWideChar(sourceCodepage,0,strIn,-1,(LPWSTR)pUnicode,unicodeLen);       BYTE * pTargetData = NULL;       int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);       pTargetData=new BYTE[targetLen+1];       memset(pTargetData,0,targetLen+1);       WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);       lstrcpy(strOut,(char*)pTargetData);       delete pUnicode;       delete pTargetData;}

上面的是介紹如何遍曆查詢資料庫中資料的,再寫上如何插入的:

db.execDML("SQL語句");

還有一個函數,也寫上,query.getIntFiel("NUM");根據欄位名來擷取一個整形的數值,這裡的NUM是通過上一步查詢語句query = db.execQuery("SELECT COUNT(*) AS NUM FROM tableName")得來的

另外就是異常:

try{

}catch(CppSQLite3Exception e){

    MessageBox(e.errorMessage());

}

還有就是,sqlite3沒有enum類型,所以,如果需要的話,另建一個表用來儲存類型

/*
CREATE TABLE IF NOT EXISTS PriceType(
type VARCHAR(10) PRIMARY KEY NOT NULL,
seq INTEGER UNIQUE
 );
 INSERT INTO PriceType(type,seq) VALUES('支出',1);
 INSERT INTO PriceType(type,seq) VALUES('收入',2);
 INSERT INTO PriceType(type,seq) VALUES('吃飯',3);
 INSERT INTO PriceType(type,seq) VALUES('房租',4);
 INSERT INTO PriceType(type,seq) VALUES('還貸',5);
 INSERT INTO PriceType(type,seq) VALUES('抽煙',6);
*/


基本的使用暫時記錄到這裡,後期如果有新的學習再到次記錄


附件地址:http://download.csdn.net/detail/qq88468560/8535969

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.