嵌入式开发学习———Linux环境下网络编程学习(四)
数据库简介
数据库是结构化数据的集合,用于高效存储、检索和管理数据。常见的数据库类型包括关系型(如MySQL、SQLite)和非关系型(如MongoDB)。关系型数据库使用表格形式存储数据,并通过SQL(结构化查询语言)操作。
SQLite3
SQLite3是轻量级、嵌入式的关系型数据库,无需服务器,以文件形式存储数据。适合嵌入式设备或小型应用。
C语言操作SQLite3示例
以下代码演示如何用C语言创建SQLite3数据库、表,并插入数据:
#include <sqlite3.h>
#include <stdio.h>int main() {sqlite3 *db;char *err_msg = 0;// 打开或创建数据库int rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK) {fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}// 创建表char *sql = "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT);";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL错误: %s\n", err_msg);sqlite3_free(err_msg);}// 插入数据sql = "INSERT INTO users(name) VALUES('Alice');""INSERT INTO users(name) VALUES('Bob');";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL错误: %s\n", err_msg);sqlite3_free(err_msg);}sqlite3_close(db);return 0;
}
关键步骤说明
- 使用
sqlite3_open
打开或创建数据库文件 - 通过
sqlite3_exec
执行SQL语句(如建表、插入数据) - 错误信息通过
sqlite3_errmsg
或err_msg
获取 - 最后调用
sqlite3_close
关闭数据库连接
编译时需要链接SQLite3库:
gcc program.c -lsqlite3 -o program
SQLite3以简洁高效著称,适合资源受限的环境。通过C语言接口可直接操作数据库文件,无需额外服务进程。
作业:
1.数据库实现案例
#include <myhead.h>int do_add(sqlite3 *dbfd)
{int id=0;char name[20]="";char sex[10]="";int age=0;printf("请输入家人编号:");scanf("%d",&id);printf("请输入姓名:");scanf("%s",name);printf("请输入性别:");scanf("%s",sex);printf("请输入年龄:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"insert into family values(%d,\"%s\",\"%s\",%d);",id,name,sex,age);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec insert error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("添加成功!!!\n");return 0;
}int do_delete(sqlite3 *dbfd)
{int id=0;printf("请输入想要删除的家人编号:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"delete from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec delete error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("删除成功!!!\n");return 0;
}int do_update(sqlite3 *dbfd)
{int id=0;printf("请输入想要删除的家人编号:");scanf("%d",&id);getchar();char name[20]="";char sex[10]="";int age=0;printf("请输入修改后的姓名:");scanf("%s",name);printf("请输入修改后的性别:");scanf("%s",sex);printf("请输入修改后的年龄:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"update family set name=\"%s\",sex=\"%s\",age=%d where id==%d;",name,sex,age,id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec update error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("修改成功!!!\n");return 0;
}int show(void *flag,int num,char **data,char **head)
{if(*((int *)flag)==0){*((int *)flag)=1;for(int i=0;i<num;i++){printf("%s\t",head[i]);}putchar(10);}for(int i=0;i<num;i++){printf("%s\t",data[i]);}putchar(10);return 0;
}int do_show(sqlite3 *dbfd)
{int flag=0;char *sql="select * from family;";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("展示成功!!!\n");return 0;
}int do_select(sqlite3 *dbfd)
{int id=0;int flag=0;printf("请输入想要查询的家人编号:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"select * from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("查询成功!!!\n");return 0;
}int main(int argc, const char *argv[])
{//打开数据库文件sqlite3 * dbfd=NULL;if(sqlite3_open("./mydb.db",&dbfd)!=SQLITE_OK){printf("sqlite3_open error:errno:%d,errmsg:%s",sqlite3_errcode(dbfd),sqlite3_errmsg(dbfd));return -1;}//创建数据表char *sql="create table if not exists family(id int,name text,sex char,age int);";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec create error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}while(1){system("clear");puts("***********************************");puts("***********家庭成员管理系统********");puts("***********1.添加家人信息**********");puts("***********2.删除家人信息**********");puts("***********3.更改家人信息**********");puts("***********4.展示家人信息**********");puts("***********5.查询家人信息**********");puts("***********0.退出程序**************");puts("***********************************");int a=0;scanf("%d",&a);getchar();switch(a){case 1:{do_add(dbfd);}break;case 2:{do_delete(dbfd);}break;case 3:{do_update(dbfd);}break;case 4:{do_show(dbfd);}break;case 5:{do_select(dbfd);}break;case 0:{sqlite3_close(dbfd);exit(EXIT_SUCCESS);}break;default:printf("错误输入,请重新输入\n");break;}printf("按下回车刷新界面\n");while(getchar()!='\n');}return 0;
}
运行结果:
2.牛客网: