做一个像qq空间的网站,.net电子商务网站开发,建筑钢材价格网,wordpress 调用分类名数据库软件: 关系型数据库: Mysql Oracle SqlServer Sqlite 非关系型数据库#xff1a; Redis NoSQL 1.数组、链表、文件、数据库 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) 文件、…数据库软件: 关系型数据库: Mysql Oracle SqlServer Sqlite 非关系型数据库 Redis NoSQL 1.数组、链表、文件、数据库 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) 文件、数据库: 外存存放数据的方式(代码运行结束、关机数据不会丢失) 文件:数据量很小 处理效率很低 数据库:数据量很大 处理数据增删改查效率高
2.安装sqlite数据库: 1.让虚拟机能够上网 2.apt-get工具集配置好 3.sudo apt-get install sqlite3 4.启动sqlite3 sqlite3 5.输入.quit退出
3.SQL命令: 1. .headers on/off 打开/关闭 数据库中列名称 2. .mode csv/column/html/insert/line/list/tabs/tcl 设置输出模式 3. .schema 表名称 查看表名称对应的表的格式(有哪几列?每一列类型?) 4. .width 宽度 设置显示时的数据宽度 5..tables 查看数据库文件中的所有表
只能对数据库进行管理
4.SQL语言: 数据的:增、删、改、查 1.使用sqlite3打开数据库文件 sqlite3 数据库文件名 sqlite3 ./student.db 2.创建表 create table drop table 删除表 示例: sqlite create table student (id integer primary key asc, name varchar(255), sex varchar(32), age integer, score integer); 3.插入数据 insert into 示例: sqlite insert into student values (1001, 张三, 男, 19, 80); sqlite insert into student (id, name, score) values (1002, 李四, 100); sqlite insert into student values (1002, 王二, 女, 18, NULL); 4.查找数据 select 示例: sqlite select * from student; sqlite select name, score from student; 5.内容匹配 where 示例: sqlite select * from student where name like 张%;
找所有的张某 sqlite select * from student where name 张伟;
张张伟 sqlite select * from student where score80 and sex 男;
找符合条件成绩大于80是男的的人
练习:数据库完成对订单的管理: 1.创建一张订单表,由 ID, 订单号, 货物信息, 生产厂商, 联系人, 联系电话, 订单时间 1 D202403120001 2.在表中插入随机给定的10条数据 3.查找 联系人为 张三 的所有订单号 select ordername from order_manager where contactperson张三; 查找 订单号为 D202403120001 的所有订单信息 select * from order_manager where ordernameD202403120001; 查找 订单时间截止到当天的所有订单号及联系人、联系电话 select ordername,contactperson,contactphone from order_manager where ordertime 20240310 24:00:00; 查找 货物信息包含 手机 内容的所有订单信息及货物信息 select ordername,orderinfo from order_manager where orderinfo like %手机%; 查找 生产厂商是华为 的所有货物信息包含 平板 的订单信息 select * from order_manager where factoryname华为 and orderinfo like %平板%; 6.主键: key:键值 内键:在表中唯一标识一条数据称为内键 把id设置为键值南无id就不可以重复了 外键:与外部表进行标识的数据称为外键
sqlite create table student (id integer primary key asc, name varchar(255), sex varchar(32), age integer, score integer); 7.删除 delete from 示例: delete from student where name李四; 8.修改 update 示例: update student set sex男,age19 where name王二; 9.排序 order by 示例: select * from order_manager order by ordertime desc;降序
多表联合查询: 1.交叉连接 cross join 示例: sqlite select student.name as 学生姓名, lesson.name as 课程名 ... from student cross join lesson; 2.内连接 inner join 示例: sqlite select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩 ... from score inner join student on score.stuidstudent.id; 3.外连接 outer join 示例: sqlite select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩 ... from student left outer join score on score.stuidstudent.id; 示例: sqlite select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩 ... from student left outer join score on score.stuidstudent.id ... where name张三 ... order by 成绩 desc;
1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开数据库文件(创建一个数据库连接) 参数: filename:数据库文件路径 ppDb:操作数据库指针存放空间的首地址 返回值: 成功返回SQLITE_OK 失败返回错误码 2.sqlite3_close int sqlite3_close(sqlite3*); 功能: 关闭数据库连接 3.sqlite3_exec int sqlite3_exec( sqlite3*, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */回调函数只有找到该数据的时候才会调用每次找到一个符合条件的数据就会他调用一次 void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */ ); 功能: 执行一条SQL语句 参数: sqlite3*: 数据库句柄 sql: 要执行的SQL语句字符串首地址 callback: 只有在select时才会使用,其余调用时传递NULL void*: 给回调函数的传参 errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间) 返回值: 成功返回SQLITE_OK 失败返回错误码 练习: 实现将dict.txt文件中的所有单词和含义插入到数据库中 5.调试段错误: 1.根据给定链接设置系统允许生成core文件 2.编译代码时加入-g选项 gcc filename.c -g -lsqlite3 3.执行代码让代码产生段错误(会生成一个包含错误信息的core文件) 4.使用gdb调试core文件 gdb a.out core 5.可以直接看到产生段错误的代码的位置