当前位置: 首页 > news >正文

数据库02 网页html01 day44

数据库

一:基础概念

	sunsolaris  gnu

1、分类: 大型 中型 小型
ORACLE MYSQL/MSSQL SQLITE DBII powdb
关系型数据库
2、名词:
DB 数据库 select update database
DBMS 数据库管理系统
MIS 管理信息系统
OA 办公自动化
3、嵌入式数据库:
sqlite3 www.sqlite.org www.kernal.org
GNU
特点:
1、开源 C语言开发
2、代码量少 1万行左右,总大小10M以内
3、绿色软件无需安装
4、文件型数据库,可以移动。
5、数据容量最大 2T

SQL struct query language :关系型数据库 非关系 :芒果db
ddl data defination language 建表
dml 新增 修改 删除一行 data modifty
dql 查询 data query language 查询 select

二:sql命令

//系统维护命令
.databases             //列出当前库和系统中那个文件在关联
.q  or  .exit          // 退出		
.headers on|off        //Turn display of headers on or off 显示头信息的开关
.schema ?PATTERN?      //列出当前指定的xxx表结构 matching PATTERN// Add --indent for pretty-printing
.tables ?TABLE?        //List names of tables(列出当期数据库中的所有表)
//标准SQL语句		//所有的sql语句都以';'结尾
创建一个表:ddl		create table  表名(表字段1,表字段2...);eg:create table user(id int,name char,age int);          注意:以上表的表字段,支持如下数据类型。int text real(小数) blob(二进制数据)默认是text类型。char
----------------------------------------------------------------------
删除一个表:	drop table  表名;eg:drop table user;
----------------------------------------------------------------------
向表中增加数据:	insert into 表名 (字段名称 ) values (值名称);eg:insert into user (id,age) values (1,10);insert into user values(3,"wang",11);insert into user (age) values ( 12);
----------------------------------------------------------------------查询表中的数据:select 列名 from 表名  条件;eg:select * from user ; 显示表的所有的列select id from user; 显示idselect id,name from user where age <30 ;select id,name from user where name =  'lisi' ;select id,name from user where id>= 2 and id <=5;//and 和 or 和 not  -----对应,用英文,不用符号   && 和 || 和 !where name   like '三一'   %_  (通配符)like + 通配符:模糊查找%:有任意多的字符(0-任意多),eg:张三,可以  张,可以   可以%张   张%----张结尾的,,,张开头的_:有一个字符,eg:张_只能匹配张三,张__只能匹配张三三SELECT * FROM aaa WHERE name LIKE 'zhang%';ascselect *from user where age>20 or age<50 order by age desc limit 2 ;
-----------------------------------------------------------------------------修改表中数据:(不加条件的话,可能导致一列都会变)update 表名 set 表字段 = 值  满足条件:eg:  update user set id = 1 where name = 'li';update user set id = 1 where name = "li" and passwd = "123";update user set id = 2 where name = "li" or  name = "zhao";
--------------------------------------------------------------------------删除表中数据:delete from 表名  满足条件:eg:delete from user ;  ///删除表中所有数据delete from user where id  = 1; ///删除id=1 的数据;delete from user where id =1 and name = "zhang";delete from user where id = 1 or id  = 2;
//插入时间列int int;
插入时间列 int int;CREATE TABLE user1(id int,name char,age int,dt datetime);'2022-07-01 19:00:00'insert into user1 values (2,'张三',23,datetime('now','+8 hours'));//该空格,有的地方不要空格
-----------------------------------------------------------------------
自动增长列sqlite> CREATE TABLE user3(id INTEGER PRIMARY(主键) KEY ASC(升序),name char,age int,dt datetime); sqlite> insert into user3 (NULL,'李四',23,datetime('now'));   //在上一次的对应位置数值上自动 +1
-----------------------------------------------------------------------asc where (group by having) order by [desc] limit;//order 以xx方式,desc 倒序,limit 添加限制条件select * from user where id<10 order by id limit 2;
------------------------------------------------------------维护命令	//在命令行写1.数据库的导出sqlite3 xxx.db .dump > xxx.sql//将数据库名称为xxx的数据库整体导出到脚本中。//可以看里面开头和结尾,也是sql语句,用C语言写,程序运行会快BEGIN TRANSACTION;COMMIT;2、数据的导入:sqlite3 xxx.db < xxx.sql3、可视化工具安装:sudo apt-get install sqlitebrowser 

三:sqlC语言

https://sqlite.org
https://sqlite.org/c3ref/intro.html

#include <sqlite3.h>
#include <stdio.h>int main(int argc, char** argv)
{sqlite3* db = NULL;char* errmsg = NULL;int ret = sqlite3_open("./aaa.db", &db);if (SQLITE_OK != ret){// 不能perrorfprintf(stderr, "open db error %s\n", sqlite3_errstr(ret));sqlite3_close(db);return 1;}char sql_cmd[512] ="insert into user3 ""values(NULL,'test',110,datetime('now'));";//因为没有使用回调函数,所以 sql_cmd 只能是除了select 语句之外的其他sql语句ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret){fprintf(stderr, "exec sql %s error %s\n", sql_cmd, errmsg);sqlite3_free(errmsg);sqlite3_close(db);return 1;}sqlite3_close(db);return 0;
}

3.1:用sql导入字典

#include <sqlite3.h>
#include <stdio.h>
#include <string.h>int main(int argc, char **argv)
{sqlite3 *db = NULL;int ret = sqlite3_open("./aaa.db", &db);if (SQLITE_OK != ret){fprintf(stderr, "open db error %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}char *errmsg = NULL;char sql_cmd[1024] = {0};sprintf(sql_cmd, "drop table dict;");sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);bzero(sql_cmd, sizeof(sql_cmd));sprintf(sql_cmd,"create table dict(id INTEGER PRIMARY KEY ASC,word char,mean text);");ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret){fprintf(stderr, "create table error %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}FILE *fp = fopen("/home/linux/dict.txt", "r");if (NULL == fp){perror("open");return 1;}while (1){char linebuf[1024] = {0};if(NULL==fgets(linebuf, sizeof(linebuf), fp)){break;}char *word = strtok(linebuf, " ");char *mean = strtok(NULL, "\r");if (NULL == word || NULL == mean){continue;}bzero(sql_cmd, sizeof(sql_cmd));sprintf(sql_cmd, "insert into dict values(NULL,\"%s\",\"%s\");", word, mean);ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret){fprintf(stderr, "exec error %s,sql [%s]\n", errmsg,sql_cmd);sqlite3_free(errmsg);sqlite3_close(db);return 1;}}sqlite3_close(db);fclose(fp);// system("pause");return 0;
}

3.2:回调函数

回调函数不一定会调:在通过 by 没有显示,就是show没有调用

对于sqlite3_exec 函数,必须传入,回调函数(因为数据库在返回结果集的,是通过回调函数的result参数反馈出来的)。如果,结果集有10条记录的话,那么,回调函数会被调用10次。在这个过程中, result 会依次变化,第1条记录,第2条记录,3条记录,....10条记录 。   如果exec 把整个结果集(结果非常多的话),一次性反馈的话。 可能内存不够申请,就会发生异常。如果没有符合条件的结果集,那么,回调函数不调用。在回调函数中的返回值,一定要返回0(If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() routine returns SQLITE_ABORT without invoking the callback again and without running any subsequent SQL statements.)
#include <sqlite3.h>
#include <stdio.h>
//函数原型:
//查询操作:sqlite3_get_table();  ////select 
//int sqlite3_get_table(sqlite3 *db,char *sql,
//					char *** rest,int *nrow,int *ncol,
//					char ** errmsg);
//show不止一次调用,调用一次,显示一行,一次二重指针,多次调用是三重指针,原函数是三次指针
int show(void*arg,int col,char**result,char** title)
{static int flag = 0;if(0 == flag){flag = 1;for(int i = 0;i<col;i++){printf("%s\t",title[i]);}printf("\n");}for(int i=0;i<col;i++){printf("%s\t",result[i]);}printf("\n");return 0;
}int main(int argc, char** argv)
{sqlite3* db = NULL;char* errmsg = NULL;int ret = sqlite3_open("./aaaa.db", &db);if (SQLITE_OK != ret){// 不能perrorfprintf(stderr, "open db error %s\n", sqlite3_errstr(ret));sqlite3_close(db);return 1;}char sql_cmd[512] ="select * from aaaa";//因为没有使用回调函数,所以 sql_cmd 只能是除了select 语句之外的其他sql语句ret = sqlite3_exec(db, sql_cmd, show, NULL, &errmsg);if (SQLITE_OK != ret){fprintf(stderr, "exec sql %s error %s\n", sql_cmd, errmsg);sqlite3_free(errmsg);sqlite3_close(db);return 1;}sqlite3_close(db);return 0;
}
id      name    age     dt
2       张三    23      2025-07-29 11:41:46
id      name    age     dt
1       niko    25      2025-07-29 11:50:00
id      name    age     dt
3       k3yoo   24      2025-07-29 11:50:16
//不加标志位的话,标题会多次打印,也说明了show会多次调用

3.3字典查找

#include <sqlite3.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>int find(void *arg, int col, char **result, char **title) {strcpy((char *)arg, result[2]);return 0;
}int main(int argc, char **argv) {sqlite3 *db = NULL;int ret = sqlite3_open("./aaaa.db", &db);if (SQLITE_OK != ret) {fprintf(stderr, "open db error %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}char *errmsg = NULL;char sql_cmd[1024] = {0};sprintf(sql_cmd, "drop table dict;");sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);bzero(sql_cmd, sizeof(sql_cmd));sprintf(sql_cmd,"create table dict(id INTEGER PRIMARY KEY ASC,word char,mean text);");ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret) {fprintf(stderr, "create table error %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}FILE *fp = fopen("/home/linux/dict.txt", "r");if (NULL == fp) {perror("open");return 1;}bzero(sql_cmd, sizeof(sql_cmd));strcpy(sql_cmd, "BEGIN TRANSACTION;");ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);while (1) {char linebuf[1024] = {0};if (NULL == fgets(linebuf, sizeof(linebuf), fp)) {break;}char *word = strtok(linebuf, " ");char *mean = strtok(NULL, "\r");if (NULL == word || NULL == mean) {continue;}bzero(sql_cmd, sizeof(sql_cmd));sprintf(sql_cmd, "insert into dict values(NULL,\"%s\",\"%s\");", word,mean);ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret) {fprintf(stderr, "exec error %s,sql [%s]\n", errmsg, sql_cmd);sqlite3_free(errmsg);sqlite3_close(db);return 1;}}bzero(sql_cmd, sizeof(sql_cmd));strcpy(sql_cmd, "COMMIT;");ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);char word[50] = {0};printf("input word:");fgets(word, sizeof(word), stdin);word[strlen(word) - 1] = '\0';int flag = 0;sprintf(sql_cmd, "select * from dict where word='%s';", word);char mean[256] = {0};ret = sqlite3_exec(db, sql_cmd, find, mean, &errmsg);if (SQLITE_OK != ret) {fprintf(stderr, "exec sql %s error %s\n", sql_cmd, errmsg);sqlite3_free(errmsg);sqlite3_close(db);return 1;}if (0 == strlen(mean)) {printf("no such word\n");} else {printf("have the word mean is:%s\n",mean);}sqlite3_close(db);fclose(fp);// system("pause");return 0;
}

四:网页设计

一:基础概念

1.格式  dreamwave
<!DOCTYPE html>
<html ><head><meta charset="utf-8"><title>中文测试。。。。</title></head><body>这里是测试body测试内容。。。<h1>h1字体</h1><h2>h1字体</h>2<h3>h1字体</h3></body> 
</html>
------------------------------------------------------------
2.标签 在body内
<h1></h1>双标签 标题 ,加粗,换行  1-6 ---》小
<p></p> 双标签  段落,有换行功效
<hr> 单标签  左到右分割符
<br> 切到下一行
<!--    -->注释
------------------------------------------------------------
3,元素的属性
给元素提供更多的属性,大部分的元素属性
语法:<标签 属性1=参数1 属性2=参数2>
1)align left,right,center
2) bgcolor ,body的属性设置网页的背景色
<body bgcolor="0xff1234" bgcolor="0xff1234">
------------------------------------------------------------
4,文本元素属性
b 元素 <b>内容</b> 加粗
br 换行<br> 如果是p标签中间有间隔
i元素, 字体倾斜<i></i>
del元素 删除文字<del></del>
strong  强调一段文字,效果类似 b标签
u元素,下划线<u></u>
small元素, 超小字体<small></small>
sub 下标<sub></sub>
sup  上标<sup></sup>
<br>h<sub>2</sub>0<br>100m<sup>2</sup>
ruby,拼音,<ruby>二姐 <rt>(er) (jie)<rt></ruby>,可能部分浏览器不支持。
mark 元素 <mark> </mark> 加黄色背景
--------------------------------------------------------
10,表单	传递参数,数据
<form></form><!-- 表单中重要的字元素 input button -->
<!-- 属性 action,指定表单发送的地址 -->
<!-- 属性 method 发送的方式 get,post -->
<!--get方法 数据会附加到url的后面传递给服务器 默认-->
<!--post,将数据包大包发给服务器,等候服务器来读取 -->
13,input元素,(输入框)他是表单的一个字属性指定表单中的内容项,比如输入内容的文本框可以指定表单属性,也可以放在表单的外面。input元素的属性:type,指定输入框的类型,text单行文本,password密码,submit提交按钮,reset,重置按键,button按键,普通的按键需要和特定的时间关联。image:图片式按键hidden:隐藏字段,该内容不显示在页面上,提交其他的一些变量。email: 是一个邮箱类型,新特性,可能支持有差异required:表示内容必须填写,不然不能提交。name:名称,输入内容识别名称,传递参数时候的参数名称value: 默认值,输入框默认填入的内容,maxlength,指定最大长度placeholder,设置提示信息的
eg:
<!DOCTYPE html>
<html><head><meta charset="utf-8"> <!--   设置字符集 --><title>中文测试。。。。</title><style>body {background-color: pink;}</style>
</head><body>这里是测试body测试内容。。。<h1>h1字体</h1><h3 style="text-align:center">h3字体</h3><h6 align='right'>h6字体</h6><h1><p>此前,村民守着世界遗产,哈尼梯田却<br><br><br>生活贫困。2018年,随着“阿者科计划”实施,阿者科村依托特有的资源,村集体旅游公司成立,村民生活改善。</p><hr><p>为丰富游客体验,村里推出“自然野趣”“哈尼文化”等主题项目,实行菜单式管理。项目带动了本地就业,促使部分外出村民返乡</p></h1><b>加粗内容</b> <i>字体倾斜</i> <del>删除文字</del> <small>超小字体</small>h<sub>2</sub>0 100m<sup>2</sup> <ruby>二姐 <rt>(er) (jie)<rt></ruby><mark>加黄色背景 </mark>
</body></html>
1.1:用html网页访问,通过数据库判断
//ser
#include <fcntl.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <time.h>
#include <unistd.h>
typedef struct sockaddr*(SA);int send_file(int conn, char* filename)
{int fd = open(filename, O_RDONLY);if (-1 == fd){perror("open");return 1;}while (1){char buf[1024] = {0};int ret = read(fd, buf, sizeof(buf));if (ret <= 0){break;}send(conn, buf, ret, 0);}close(fd);return 0;
}
int main(int argc, char** argv)
{//监听套接字 功能检测是否有客户端 连连接服务器int listfd = socket(AF_INET, SOCK_STREAM, 0);if (-1 == listfd){perror("socket");return 1;}// man 7 ipstruct sockaddr_in ser, cli;bzero(&ser, sizeof(ser));bzero(&cli, sizeof(cli));ser.sin_family = AF_INET;// sudo ./sser.sin_port = htons(80);//访问1000以下的端口,是系统端口,需要sudo// 代表本机地址  外部客户端可以连接到服务器ser.sin_addr.s_addr = INADDR_ANY;int ret = bind(listfd, (SA)&ser, sizeof(ser));if (-1 == ret){perror("bind");return 1;}// 同一时刻可以服务器建立连接的排队数listen(listfd, 3);socklen_t len = sizeof(cli);while (1){// 1 建立连接int conn = accept(listfd, (SA)&cli, &len);if (-1 == conn){perror("accept");close(conn);continue;}char buf[1024] = {0};// 2接收客户端的请求int rec_ret = recv(conn, buf, sizeof(buf), 0);if (rec_ret <= 0){close(conn);continue;}printf("%s\n", buf);// 3 处理请求+回应//http://127.0.0.1/  回环,访问自己// GET / HTTP/1.1\r\nchar* method = strtok(buf, " ");// GET//统一资源定为符char* url = strtok(NULL, " ");// /char* ver = strtok(NULL, "\r");// HTTP/1.1if (0 == strcmp(url, "/")){send_file(conn, "./02.html");  // login}else if (0 == strcmp(url, "/favicon.ico"))//网址图标{send_file(conn, "./2.png");  // login}//  /login?username=zhangsan&userpw=123else if (0 == strncmp(url, "/login", strlen("/login"))){char* name = strchr(url, '=');name += 1;char* end = strchr(name, '&');*end = '\0';char* pw = strchr(end + 1, '=');pw += 1;if (0 == strcmp(name, "zhangsan") && 0 == strcmp(pw, "123")){//账号 ,密码正确 发送功能页面send_file(conn, "./01.html");}else{//账号密码错误, 发送密码错误页面send_file(conn, "./03.html");}}// 4 断开连接close(conn);}close(listfd);// system("pause");return 0;
}
<!DOCTYPE html><html>
<head><meta charset="utf-8"><!--中文标识 --><title>登录</title></head>
<body><form action='login'> <!-- 属性 action,指定表单发送的地址 -->用户名: <input type='text' name='username' required='required' placeholder='请输入qq账号'><!--type,指定输入框的类型,text单行文本,password密码,submit提交按钮,--><!--name:名称,输入内容识别名称,传递参数时候的参数名称--><!--required:表示内容必须填写,不然不能提交。 --><!--placeholder,设置提示信息的。 -->密码: <input type='password' name='userpw' required='required' placeholder='请输入qq的密码'><!-- password密码--><input type='submit'><!--submit提交按钮 --></form><!-- http://127.0.0.1/login?username=niko&userpw=25--></body>
</html>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>密码错误</title>
</head>
<body><h1 align="center"><mark>密码错误</mark></h1>
</body>
</html>
http://www.xdnf.cn/news/1209979.html

相关文章:

  • 抵御酒店管理系统收银终端篡改攻击 API 加密的好处及实现——仙盟创梦IDE
  • 如何创建一个 Solana 钱包?
  • 文件操作与IO流
  • 如何编写好的测试用例?
  • 泛微E9 引入高版本spring导致webservices接口报错
  • 青少年软件编程图形化Scratch等级考试试卷(四级)2025年6月
  • SpringBoot之起步依赖
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML
  • java导出pdf(使用html)
  • Java:为什么需要通配符捕获(wildcard capture)
  • 【WRF-Chem 实例1】namelist.input 详解- 模拟CO2
  • 【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
  • 机器学习第二课之线性回归的实战技巧
  • Three.js 性能优化全面指南:从几何体合并到懒加载资源
  • Ubuntu上开通Samba网络共享
  • nodejs 实现Excel数据导入数据库,以及数据库数据导出excel接口(核心使用了multer和node-xlsx库)
  • CTF Misc入门篇
  • 创建型设计模式-工厂方法模式和抽象工厂方法模式
  • Ubuntu卡在启动画面:显卡驱动与密码重置
  • 青少年软件编程图形化Scratch等级考试试卷(二级)2025年6月
  • Spring Boot 防重放攻击全面指南:原理、方案与最佳实践
  • Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析
  • 聊聊测试环境不稳定如何应对
  • Excel制作滑珠图、哑铃图
  • 【初识数据结构】CS61B中的基数排序
  • 分割回文串(回溯算法)
  • 智能制造的空间度量:机器视觉标定技术解析
  • 26考研英语词汇的逻辑笔记(Unit31-43)
  • 如何进行项目复盘?核心要点分析
  • 新升级超值型系列32位单片机MM32G0005