ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Linux 嵌入式开发学习day6:数据库操作图文详解

2021-07-07 17:02:22  阅读:236  来源: 互联网

标签:name day6 嵌入式 char stu int Linux sqlite3 id


【1】 UNIX域套接字     本地的进程间通信     s   socket           前5天的内容TCP,UDP 都是依赖IP 端口号进行通信的          struct sockaddr_in serveradd; //网络信息结构体  internet          unix域套接字编程,实现本间进程的通信, 依赖的是s类型的文件;      服务器端:            1. socket(AF_UNIX, SOCK_STREAM, 0)                                        填充结构体:             struct sockaddr_un serveradd;  //unix                          struct sockaddr_un {                 __kernel_sa_family_t sun_family; /* AF_UNIX */                 char sun_path[UNIX_PATH_MAX];   /* pathname */             };                           用法:             struct sockaddr_un serveraddr;             serveraddr.sun_family = AF_UNIX;             strcpy(serveraddr.sun_path,"myunixfile");                             2.  bind(,本地地址, )            3. listen(,)            4. accept(,,)            5.  recv() / send() 用法实例: 客户端:          1. socket(AF_UNIX, SOCK_STREAM, 0)          2. 填充struct sockaddr_un 结构体          3. connect(,,)          4.  recv() / send()             …… 用法实例:          unlink("myunixtcp");//可重复利用链接文件     htons()          htonl(INADDR_ANY);      【2】 数据库          sqlite3          sqlite3 安装:         1. sudo dpkg -i *.deb  离线安装                  2. 在线安装             1、设置能够上网             2、更新更新源             # sudo apt-get update                      3、安装软件及开发环境             # apt-get install sqlite3        --->sqlite3数据库软件             # apt-get install libsqlite3-dev    --->sqlite3数据库开发支持库             # apt-get install sqlite3-doc        --->sqlite3数据库说明文档         --------------------------------                  # sudo apt-get install sqlitebrowser                     --->sqlite3数据库操作软件               测试是否安装成功:         SQLite version 3.7.9         Enter ".help" for instructions         Enter SQL statements terminated with a ";"         sqlite>                  如果出现以上内容,表示安装成功; 【3】 操作数据库     {1}. 命令的方式操作         sqlite3 数据库文件名(stu.db)              两种命令:     1. sqlite3系统命令         都是以 '.' 开头的         a.   .help  查看所有支持的命令         b.   .quit  退出         c.   .tables  查看有哪些表         d.   .schema stu2  查看表结构     2. SQL命令         SQL命令是以 “;” 结尾          1. 创建一个表.out         create table stu(id int,name char,score float);          create table stu(id int primary key, name char, score float);         注:把id字段设置为主键(在表中唯一);                          字符串:char string text             小数:float real             不支持严格的类型检查的;                   2. 删除一个表             drop  table  <table_name>;                          ...>;                       3. 向表里面插入数据         insert  into  <table_name>  values(value1, value2,…);         insert into stu values(1,"xiaomingx",99.9);                  //只插入部分字段    id  name  score         insert into stu(id,name) values(4,'xiaoming');                       4. 查找数据         查询表中所有记录          select  *  from  <table_name>;              按指定条件查询表中记录         select  *  from  <table_name>  where  <expression>;         select * from stu where id=2;         select * from stu where id=2 and name='lisi';         select * from stu where id=1 or name='zhangsan';                  select score from stu where name='LiSi' or id=3; //限定条件查询         select name,score from stu where name='LiSi' or id=3;                      select * from stu limit 5;   //只查询前n条记录         select * from stu order by id desc; //按id从大到小进行排序                   5. 修改(更新)数据          update  <table_name>  set  <f1=value1>, <f2=value2>…   where  <expression>;           update stu set     id=10 where id=1;                   6. 增加字段          alter table <table> add column <field> <type> default  …;         alter table stu add column class int default 1;                7.删除字段操作         1)create table student as select id,name,score from stu;             创建一个student表,从stu表当中复制id,name,score         2) drop table stu;             删除原有的stu表         3) alter table student rename to stu;             重命名          {2} . C代码的方式操作sqlite          sqlite3API接口查询地址:      https://www.sqlite.org/c3ref/sqlite3.html :              int   sqlite3_open(char  *path,   sqlite3 **db);             功能:打开sqlite数据库       参数:         path: 数据库文件路径                  db: 指向sqlite句柄的指针               返回值:成功返回0,失败返回错误码(非零值)                   sqlite3 *db;          sqlite3_open("stu.db",&db);              值传递:   获取到值     地址传递: 修改值得使用地址传递     ==========================================      int   sqlite3_close(sqlite3 *db);        功能:关闭sqlite数据库                   返回值:成功返回0,失败返回错误码                    sqlite3_close(db);          ==========================================           const  char  *sqlite3_errmsg(sqlite3 *db);               返回值:返回错误信息          perror("open failed.");              fprintf(stderr,"sqlite3_open failed %s\n",sqlite3_errmsg(db));               =================================     注意编译时出现以下问题:     linux@ubuntu:~/1907-net/day6/sqlite3$ gcc 1_sqlite3.c     /tmp/ccDbTidR.o: In function `main':     1_sqlite3.c:(.text+0x19): undefined reference to `sqlite3_open'     1_sqlite3.c:(.text+0x29): undefined reference to `sqlite3_errmsg'     1_sqlite3.c:(.text+0x5c): undefined reference to `sqlite3_close'     collect2: ld returned 1 exit status          应该链接库:          gcc 1_sqlite3.c -lsqlite3              =====================================     typedef  int (*sqlite3_callback)(void *, int, char **, char **);          sqlite3_callback   int (*)(void *, int, char **, char **)               int sqlite3_exec(sqlite3 *db , const  char   *sql ,  sqlite3_callback callback , void *arg ,  char **errmsg );       非查询时:                           (句柄)                                                                      (NULL)          (NULL)      功能:执行SQL语句                   db:数据库句柄          sql:SQL语句 ("create table stu .....;")          callback:回调函数          void * arg:(给回调函数传的参数)             当使用查询命令的时候,callback和arg才有意义;             select .....                       errmsg:错误信息指针的地址              char *errmsg;                  &errmsg;                   返回值:成功返回0,失败返回错误码          举个例子:         创建一个stu表     sqlite3_exec(db,"create table stu(id int,name char,score float);"                 NULL,NULL,&errmsg);      ============================================================      int callback(void *para, int f_num, char **f_value, char **f_name);     功能: 每找到一条记录自动执行一次回调函数
id name score
1 运才 10.2
2 一文 12.1
        para:   传递给回调函数的参数         f_num:  记录中包含的字段数目(id name score)                  相当于有多少列;         f_value:包含每个字段值的指针数组         f_name:包含每个字段名称的指针数组 callback函数: 用sqlite3_exec实现select:              返回值:成功返回0,失败返回-1      ================================================================         char sql[128];         int id = 1;         char *name = "zhaoliu";         float score = 88.8;                                                                                              sprintf(sql,"insert into stu values(%d,\"%s\",%f);",id,name,score);         if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0) =================================================================          不使用回调函数执行SQL语句     int  sqlite3_get_table(sqlite3 *db, const  char  *sql, char ***resultp,  int *nrow,  int *ncolumn, char **errmsg);     功能:执行SQL操作            db:数据库句柄     sql:SQL语句          resultp:用来指向sql执行结果的指针;实际上就是“指针数组指针”;     nrow:满足条件的记录的数目,实际上就是有多少行数据;     ncolumn:每条记录包含的字段数目,实际上就是有多少个字段(多少列);          errmsg:错误信息指针的地址       返回值:成功返回0,失败返回错误码、、                                                                                               

标签:name,day6,嵌入式,char,stu,int,Linux,sqlite3,id
来源: https://blog.csdn.net/haogewudi666/article/details/118551876

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有