SQLite數據庫是一種本地的輕型數據庫,在存儲一些本地的數據的時候,或者不需要用到Oracle,SQL2008之類的大型數據庫的時候,Sqlite的優勢就能夠得到發揮。程序需要采集數據存儲起來,可以使用這個數據庫。或者覺得ini文件,txt文件在存儲的過程中,數據的組織比較困難可以使用這個數據庫。
同時如果是涉及嵌入式系統,SQLite的便捷性能夠得到更好的體現。他將所有的方法都包含在了三個文件中:
sqlite3.h
sqlite3.c
sqlite3ext.h
附下載地址:鏈接:http://pan.baidu.com/s/1qYawfFY 密碼:l7fq
地址失效可以私信。
在使用的過程中,最簡單的辦法是,你可以直接將三個文件全部添加到相應的工程中,在引用頭文件之后,你就可以使用其中的方法了。
其中的增刪改查可以參考如下代碼使用:但是要注意自己應該添加和完善一些功能
sqlite3 *db=NULL; char *zErrMsg = 0; int rc; //打開指定的數據庫文件,如果不存在將創建一個同名的數據庫文件 rc = sqlite3_open("zsl.db", &db); if( rc ) { CString temp1; temp1.Format(_T("Can’t open database: %s\n"), sqlite3_errmsg(db)); TRACE(temp1); //fprintf(stderr, "Can’t open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return (1); } else TRACE("You have opened a sqlite3 database named zsl.db successfully!\n"); //創建一個表,如果該表存在,則不創建, //並給出提示信息,存儲在zErrMsg 中 char *sql = " CREATE TABLE test(ID INTEGER PRIMARY KEY,AGE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),SALARY REAL);" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); //插入數據 sql = "INSERT INTO \"test\" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); int nrow = 0, ncolumn = 0; //查詢結果集的行數、列數 char **azResult; //二維數組存放結果 //查詢數據 sql = "SELECT * FROM test "; sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg ); int i = 0 ; printf( "row:%d column=%d \n" , nrow , ncolumn ); printf( "\nThe result of querying is : \n" ); for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ) printf( "azResult[%d] = %s\n", i , azResult[i] ); //刪除數據 sql = "DELETE FROM test WHERE AGE = 1 ;" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); //釋放掉azResult 的內存空間 sqlite3_free_table( azResult ); sqlite3_close(db); //關閉數據庫 int c=getchar(); return 0; }
值得注意的地方,在於在使用sqlite3 的時候,你會發現存儲的過程中會出現中文的亂碼,那是因為,SQLite3數據庫默認的編碼格式為UTF-8,所以在使用之前,需要對你的格式進行轉換。
以VC++ MFC為例,如果你的程序使用的是默認Unicode編碼,那么只需要Unicode->UTF-8的轉換,如果你是使用的多字節字符集,那么系統默認的編碼格式應該是Ansi,這時候,你需要將編碼從Ansi轉換到Unicode,然后從Unicode轉換到UTF-8。
因為我的工程中使用的多字節,所以我這里先貼出一個Ansi轉換為UTF-8的代碼:
//Ansi To Utf-8 Utf-8 To Ansi char* *****::AnsiToUtf8(char* stransi) { //Ansi to Unicode int wcsLen = ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),NULL,0); wchar_t* strunicode = new wchar_t[wcsLen+1]; ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),strunicode,wcsLen); strunicode[wcsLen] = '\0'; //Unicode To UTF-8 int utf8len = ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL); char* strutf8 = new char[utf8len+1]; ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),strutf8,utf8len,NULL,NULL); strutf8[utf8len] = '\0'; delete [] strunicode; strunicode = NULL; return strutf8; } char* ***::Utf8ToAnsi(char* strutf8) { //UTF-8 To Unicode int wlen = ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),NULL,0); wchar_t* strunicode = new wchar_t[wlen+1]; ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),strunicode,wlen); strunicode[wlen] = '\0'; //Unicode To Ansi int ansilen = ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL); char* szAnsi = new char[ansilen+1]; ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),szAnsi,ansilen,NULL,NULL); szAnsi[ansilen] = '\0'; delete [] strunicode; strunicode = NULL; return szAnsi; }
注意這段代碼中,使用了2個new,但是只delete了一個,這里需要你在使用完成轉換后的字符串,進行手動delete,否則可能造成內存泄漏。。
轉換完成之后的顯示,中文就不是亂碼。
最后附上一個工具,用來查看sqlite的數據庫的內容,但是因為我的電腦上的安裝包沒有了,所以這里只留下一個名字好了,等到之后有機會再補上鏈接。
名字:Navicat premium 以及他的補丁
圖標是這樣的:
打開之后就可以查看你創建的SQLite數據庫的文件,很方便可以檢查你代碼的正確或者錯誤

連接補完計划:
鏈接:http://pan.baidu.com/s/1pKELaSb 密碼:icay
失效私信我,或者郵箱452875117@qq.com
