Linux 嵌入式开发学习day6:数据库操作图文详解
2021/7/7 19:06:05
本文主要是介绍Linux 嵌入式开发学习day6:数据库操作图文详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【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 |
这篇关于Linux 嵌入式开发学习day6:数据库操作图文详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23linux 系统宝塔查看网站访问的命令是什么?-icode9专业技术文章分享
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南