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