SQLite,是一款轻型的数据库,其设计目标是嵌入式的数据库,而且当前在很多嵌入式产品中使用到了sqlite数据库,sqlite数据库占用资源非常的低,对嵌入式设备而言,内存是非常宝贵的,而sqlite数据库可能只需要几百K的内存就够了。
Sqlite数据库还能够支持Windows/Linux/Unix等等主流的操作系统,其跨平台的可移植性特别强,这极大的拓展了其生存的空间。
同时能够跟很多程序语言相结合,比如Cinclude
defineDATABASE""
defineIS_NUM(index)(0=indexindex=9)?1:0
intflags=0;
intdo_insert(sqlite3*db)
{
intid;
charname[N];
intscore;
charsql[N];
char*errmsg;
printf("pleaseinputid");
scanf("%d",id);
getchar();
printf("pleaseinputname");
scanf("%s",name);
getchar();
printf("pleaseinputscore");
scanf("%d",score);
getchar();
sprintf(sql,"insertintostuvalues(%d,'%s',%d)",id,name,score);
if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK)
{
printf("%s\n",errmsg);
}
else
{
printf("thedatasisinsertedsuccessfully\n");
}
return0;
}
//回调函数负责得到查询的结果
intcallback(void*arg,intncolumn,char**f_value,char**f_name)
{
inti=0;
if(flags==0)
{
for(i=0;incolumn;i++)
{
printf("%-11s",f_name[i]);
}
putchar(10);
flags=1;
}
for(i=0;incolumn;i++)
{
printf("%-11s",f_value[i]);
}
putchar(10);
return0;
}
//查询数据
intdo_select(sqlite3*db)
{
char*errmsg;
if(sqlite3_exec(db,"select*fromstu",callback,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}else{
printf("thedatasisselectedsuccessfully\n");
}
return0;
}
intdo_update(sqlite3*db)
{
intid,score;
charname[N]={0},columnname[N]={0},columntype[N]={0};
intnum,index;
char*errmsg;
charsql[N]={0};
printf("inputyourindexforsearch:1id2name3score:\n");
scanf("%d",index);
getchar();
if(index==1){
printf("inputid:\n");
scanf("%d",id);
}elseif(index==2){
printf("inputname:\n");
scanf("%s",name);
}else{
printf("inputscore:\n");
scanf("%d",score);
}
printf("yourchoicewhoseinfotoupdate:1id2name3score4colum:\n");
scanf("%d",num);
getchar();
switch(num)
{
case1:
printf("pleaseinputid:");
scanf("%d",id);
getchar();
if(index==1){
printf("inputsorry,thesameinfo,noneedchange.\n");
}elseif(index==2){
sprintf(sql,"updatestusetid=%dwherename='%s'",id,name);
}elseif(index==3){
sprintf(sql,"updatestusetid=%dwherescore=%d",id,score);
}if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}
break;
case2:
printf("pleaseinputname:");
scanf("%s",name);
getchar();
if(index==1){
sprintf(sql,"updatestusetname=%swhereid='%d'",name,id);
}if(index==2){
printf("inputsorry,thesameinfo,noneedchange.\n");
}elseif(index==3){
sprintf(sql,"updatestusetname=%swherescore=%d",name,score);
}if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}
break;
case3:
printf("pleaseinputsocre:");
scanf("%d",score);
getchar();
if(index==1){
sprintf(sql,"updatestusetscore=%dwhereid='%d'",score,id);
}elseif(index==2){
sprintf(sql,"updatestusetscore=%dwherename=%s",score,name);
}elseif(index==3){
printf("inputsorry,thesameinfo,noneedchange.\n");
}
if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}
break;
case4:
printf("pleaseinputcolumnname:");
scanf("%s",columnname);
getchar();
printf("pleaseinputcolumntype:INTorCHAR");
scanf("%s",columntype);
getchar();
sprintf(sql,"altertablestuaddcolumn'%s''%s''",columnname,columntype);
if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}
break;
default:
printf("inputillegal.\n");
}
printf("thedatasisupdatesuccessfully\n");
return0;
}
intdo_delete(sqlite3*db)
{
inti=0;
chartable[N]={0};
intid,score,index;
charname[N]={0};
char*errmsg;
charsql[N]={0};
char*delsql[5]={0};
printf("\n");
do_select(db);//printfdatabaseinfolist
printf("\n");
printf("inputindexfordelete:1id2name3score4table5colum:\n");
scanf("%d",index);
getchar();
if(index==1){
printf("inputid:\n");
scanf("%d",id);
sprintf(sql,"deletefromstuwhereid=%d",id);
}elseif(index==2){
printf("inputname:\n");
scanf("%s",name);
sprintf(sql,"deletefromstuwherename=%s",name);
}elseif(index==3){
printf("inputscore:\n");
scanf("%d",score);
sprintf(sql,"deletefromstuwherescore=%d",score);
}elseif(index==4){
printf("inputwhichtable:\n");
scanf("%s",table);
sprintf(sql,"droptable%s",table);
}elseif(index==5){
if
delsql[0]="createtablestu1asselectid,namefromstu";
delsql[1]="droptablestu";
delsql[2]="altertablestu1renametostu";
for(i=0;i3;i++){
printf("delsql[%d]:%s\n",i,delsql[i]);
}
return0;
}
if(sqlite3_exec(db,sql,NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}
return0;
}
intmain(intargc,constchar*argv[])
{
sqlite3*db;
char*errmsg;
intnum;
//创建(打开)数据库
if(sqlite3_open(DATABASE,db)!=SQLITE_OK){
printf("%s\n",sqlite3_errmsg(db));
}else{
printf("thedatabaseisopenedsuccessfully\n");
}
//创建一张表
if(sqlite3_exec(db,"createtablestu(idint,namechar,scoreint)",NULL,NULL,errmsg)!=SQLITE_OK){
printf("%s\n",errmsg);
}else{
printf("thetableiscreatedsuccessfully\n");
}
//对当前表进行增删改查
while(1)
{
printf("\n");
printf("***1:插入数据2:查询数据3:修改数据4:删除数据5:退出***\n");
printf("\n");
printf("");
scanf("%d",num);
getchar();
switch(num)
{
case1:
do_insert(db);
break;
case2:
flags=0;
do_select(db);
//do_select_get_table(db);
break;
case3:
do_update(db);
break;
case4:
do_delete(db);
break;
case5:
sqlite3_close(db);
return-1;
default:
printf("pleaseinputcorrectoption\n");
}
}
return0;
}
测试结果:
fengjunhui@ubuntu:~/Sqlite$./
thedatabaseisopenedsuccessfully
tablestualreadyexists
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
2
idnamescore
1001liuxiaofan92
1004fengjunhui98
1003luzhengyu96
thedatasisselectedsuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
1
pleaseinputid1005
pleaseinputnamexiaohuihui
pleaseinputscore76
thedatasisinsertedsuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
3
inputyourindexforsearch:1id2name3score:
1
inputid:
1004
yourchoicewhoseinfotoupdate:1id2name3score4colum:
3
pleaseinputsocre:88
thedatasisupdatesuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
2
idnamescore
1001liuxiaofan92
1004fengjunhui88
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
4
1001liuxiaofan92
1004fengjunhui88
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
inputindexfordelete:1id2name3score4table5colum:
2
inputname:
fengjunhui
nosuchcolumn:fengjunhui
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
2
idnamescore
1001liuxiaofan92
1004fengjunhui88
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
5
fengjunhui@ubuntu:~/Sqlite$gcc5_
fengjunhui@ubuntu:~/Sqlite$./
thedatabaseisopenedsuccessfully
tablestualreadyexists
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
4
idnamescore
1001liuxiaofan92
1004fengjunhui88
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
inputindexfordelete:1id2name3score4table5colum:
2
inputname:
'fengjunhui'
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
2
idnamescore
1001liuxiaofan92
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
5
fengjunhui@ubuntu:~/Sqlite$gcc5_
fengjunhui@ubuntu:~/Sqlite$./
thedatabaseisopenedsuccessfully
tablestualreadyexists
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
4
idnamescore
1001liuxiaofan92
1003luzhengyu96
1005xiaohuihui76
thedatasisselectedsuccessfully
inputindexfordelete:1id2name3score4table5colum:
5
delsql[0]:createtablestu1asselectid,namefromstu
delsql[1]:droptablestu
delsql[2]:altertablestu1renametostu
1:插入数据2:查询数据3:修改数据4:删除数据5:退出
5
扩展内容:
sqlite3支持的数据类型:
NULL、INTEGER、REAL、TEXT、BLOB
但是,sqlite3也支持如下的数据类型
smallint16位整数
integer32位整数
decimal(p,s)p是精确值,s是小数位数
float32位实数
double64位实数
char(n)n长度字符串,不能超过254
varchar(n)长度不固定大字符串长度为n,n不超过4000
graphic(n)和char(n)一样,但是单位是两个字符double-bytes,n不超过127(中文字)
vargraphic(n)可变长度且大长度为n
date包含了年份、月份、日期
time包含了小时、分钟、秒
timestamp包含了年、月、日、时、分、秒、千分之一秒
sqlite3支持的函数
【1】日期函数
datetime():产生日期和时间
date():产生日期
time():产生时间
strftime():对以上3个函数产生的日期和时间进行格式化
用法实例:
1、selectdate('2011-9-9','+1day','+1year');结果是2010-09-10
2、selectdatetime('now');当前日期和时间
3、selectdatetime('now','startofmonth');本月的第一天零点,也可以设置年和日的第一天
4、selectdatetime('now','+1hour','-12minute');当前时间加48分钟
strftime()函数可以将YYYY-MM-DDHH:MM:SS格式的日期字符串转换为其它形式的字符串
%d:天数,01-31
%f:小数形式的秒,
%H:小时
%j:某一天是该年的第几天,001-366
%m:月份,00-12
%M:分钟,00-59
%s:从1970到现在的秒数
%S:秒,00-59
%w:星期,0-6,0是星期天
%W:某天是该年的第几周,01-53
%Y:年,YYYY
%%百分号
应用举例:
selectstrftime('%Y.%m.%d%H:%M:%S','now','localtime');
二、【算术函数】
abs(X):返回绝对值
max(X,Y[,]):返回大值
min(X,Y,[,]):返回小值
random(*):返回随机数
round(X[,Y]):四舍五入
三、【字符串处理函数】
length(x):返回字符串字符个数
lower(x):大写转小写
upper(x):小写转大写
substr(x,y,Z):截取子串
like(A,B):确定给定的字符串与指定的模式是否匹配
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。加微信领取资料