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