嵌入式数据库是什么

admin 2025-03-24 11人围观 ,发现177个评论

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。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。加微信领取资料

猜你喜欢
不容错过