苏嵌实训——day19

news2025/2/23 19:44:05

文章目录

  • 一、数据库
    • 1.1 在ubuntu中安装数据库
    • 1.2 数据库的操作
      • 1.2.1 数据库命令的分类
      • 1.2.2 常用的系统命令
      • 1.2.3 数据中的常用的语句
    • 1.3 sqlite数据库中常用api
      • 1. sqlite3_open
      • 2. int sqlite3_close(sqlite3 * db)
      • 3. sqlite3_exec
      • 4 sqlite3_get_table
      • 5 void sqlite3_free_table(char ** result)
  • 二 项目--网络聊天室

var code = “a885af14-a5b4-4dd5-b52d-1fcfb087c32c”

一、数据库

1.1 在ubuntu中安装数据库

sudo apt-get install sqlite3 libsqlite3-dev
安装测试:
输入sqlite3,如果能够成功进入数据库,说明安装成功:
在这里插入图片描述

1.2 数据库的操作

1.2.1 数据库命令的分类

系统命令:是以.开头的命令,主要用于对当前数据库操作
注意:系统命令后面不能加;
普通命令:是以;结尾的命令,主要对数据库中的表进行操作
注意:普通命令前不能加 .

1.2.2 常用的系统命令

.help:查看帮助信息,列出所有的系统命令
.exit: 退出数据库
.quit:退出数据库
.databases:查看当前数据库信息
.tables:列出当前数据库中所有表的表名
.schema:列出数据库中所有表的结构

1.2.3 数据中的常用的语句

-- 进入sqlite3
sqlite3 student.db
-- 退出数据库
.exit

-- 创建一张表
 create table stu(id int,name char,sex char,score int);
 注意:字符或者字符串的类型指定为char或者text
 
 -- 查看表结构
 .schema
 -- 插入数据
 insert into stu (id,name,sex,score) values(1001,"zhangsan",'m',98);
 insert into stu values(1002,"lisi",'f',99);
 insert into stu values(1003,"wanger",'m',100),(1004,"xiaoming",'f',101);
 
 --查询数据
select * from stu;  //查找所有记录
select *from stu where sex='f'; //查找符合条件的记录
select *from stu where sex='f' and id = 1002; 
select *from stu where sex='f' or id = 1001;
select id,name from stu;  //只查询id和name

-- 删除记录
delete from stu where id = 1001;
-- 修改记录
update stu set score=77 where id = 1003;

--添加一列
alter table stu add column vip int;

--删除一列
    sqlites不允许直接删除一列
    1)先创建一张新表
    create table stu1 as select id,name from stu;
    2) 删除原来的旧表
    drop table stu;
    3)对新表进行重命名
    alter table stu1 rename to stu;
-- 数据库主键(既设置的数据将会是唯一的存在的)
    create table usr(name text primary key,passwd text);
-- 删除表
    drop table stu;

1.3 sqlite数据库中常用api

1. sqlite3_open

头文件:#include <sqlite3.h>
原型:int sqlite3_open(const char *filename,sqlite3 **ppDb);
功能:打开或者创建一个数据库
参数:
    filename:数据库的名字
    PPdb:操作数据库的指针,句柄。
返回值:
    成功:返回:SQLITE_OK
    失败:error_code  可通过sqlite3_errmsg获取错误信息

2. int sqlite3_close(sqlite3 * db)

功能:关闭一个数据库

3. sqlite3_exec

头文件:#include <sqlite3.h>
原型:int sqlite3_exec(sqlite3 *db,const char *sql,int (*callback)(void *,int,char**,char**),void *arg,char **errmsg);
功能:执行一条sql语句
参数:
    db:数据库的句柄指针
    sql:将要被执行sql语句
    callback:回调函数,只有在查询语句时,才会给回调函数传参
    arg:为callback传参的
    errmsg:错误信息地址
返回值:
    成功:返回:SQLITE_OK
    失败:error_code  可通过sqlite3_errmsg获取错误信息
    ******************************************************
    int (*callback)(void *arg,int ncolumn,char**f_value,char**f_name)
    功能:得到查询的结果
    参数:
        arg:为回调函数传参使用的
        ncolumn:记录包含的字段的数目(列数)
        f_value:包含每个字段值的指针数组
        f_name:包含每个字段名称的指针数组
    返回值:
        成功 0
        出错:非0

4 sqlite3_get_table

原型:int sqlite3_get_table(sqlite3 *db,const char *sql,char ***pazresult,int *pnRow,int *pnColumn,char **pzErrmsg);
功能:查询数据库,它会创建一个新的内存区域来存放查询的结果信息
参数:
    db:数据库的句柄指针
    sql:将要被执行sql语句
    pazresult:查询的结果
    pnRow:行数
    pnColumn 列数
    pzErrmsg 错误信息
返回值:
    成功 0
    出错:errcode
    pnRow的值为查询到的符合条件的记录数(不包含字段名)。
    pnColumn的值为查询到的符合条件的字段数。

5 void sqlite3_free_table(char ** result)

功能:释放内存
在这里插入图片描述

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
int print(void *arg,int column,char **value,char **name)  //column为列数,name:字段名 value:数据
{
    int i;
    for(i = 0 ; i < column;i++)
    {
        printf("%s = %s ",name[i],value[i]);
    }
    printf("\n");
    return 0;
}
int main(int argc, char const *argv[])
{
    sqlite3 *ppdb;
    //打开或者创建数据库
    int ret = sqlite3_open("stu.db",&ppdb);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3 open: %s\n",sqlite3_errmsg(ppdb));
        return -1;
    }
    //创建表
    char sql[128] = {0};
    sprintf(sql,"create table if not exists stu(id int,name char,sex char,score int);");
    ret = sqlite3_exec(ppdb,sql,NULL,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_exec: %s\n",sqlite3_errmsg(ppdb));
        return -1;        
    }
    //插入数据
    int i;
    int id,score;
    char name[32] = {0};
    char sex;
    /*for(i = 0; i < 2;i++)
    {
        printf("请输入学号、姓名、性别、分数:\n");
        scanf("%d%s %c %d",&id,name,&sex,&score);
        memset(sql,0,sizeof(sql));
        sprintf(sql,"insert into stu values(%d,'%s','%c',%d);",id,name,sex,score);
        ret = sqlite3_exec(ppdb,sql,NULL,NULL,NULL);
        if(ret != SQLITE_OK)
        {
            printf("sqlite3_exec2: %s\n",sqlite3_errmsg(ppdb));
            return -1; 
        }
    }*/
    memset(sql,0,sizeof(sql));
    sprintf(sql,"select * from stu;");
    /*ret = sqlite3_exec(ppdb,sql,print,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_exec: %s\n",sqlite3_errmsg(ppdb));
        return -1;        
    }*/
    char **result;
    int row,column;
    ret = sqlite3_get_table(ppdb,sql,&result,&row,&column,NULL);  //row:行   column:列
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_get_table : %s\n",sqlite3_errmsg(ppdb));
        return -1;
    }
    int j;
    int Index = column;
    for(i = 0; i < row;i++)   //行
    {
        for(j = 0; j < column;j++)   //列
        {
            printf("%s = %s ",result[j],result[Index]);
            Index++;
        }
        putchar(10);
    }
    return 0;
}

二 项目–网络聊天室

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE12-Spring MVC程序开发

目录 1.什么是Spring MVC? 1.1.MVC定义 1.1.1.Model&#xff08;模型&#xff09; 1.1.2.View&#xff08;视图&#xff09; 1.1.3.Controller&#xff08;控制器&#xff09; 1.2.MVC和Spring MVC的关系 2.为什么要学Spring MVC? 3.怎么学Spring MVC? 3.1.Spring …

LeetCode——2319. 判断矩阵是否是一个 X 矩阵

一、题目 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &#xff0c;表示一个正方形矩阵。如果 grid 是一个 X 矩阵 &#xff0c…

Linux的shell入门和版本控制(五)

0、前言 这部分简单介绍了Linux系统中的shell编程 1、服务监听 在Linux中的服务监听&#xff0c;相当于在windows中的任务管理器。常用指令&#xff1a; 示例一&#xff1a;查询进程 ps -aux|grep 要查询的程序名&#xff1a;这样查询会连带这条查询指令的进程一起查询出来。…

【深度学习笔记】LSTM的介绍及理解

问题 LSTM是深度学习语音领域必须掌握的一个概念,久仰大名,现在终于要来学习它了,真是世事无常,之前以为永远不会接触到呢,因此每次碰到这个就跳过了。 前言 LSTM (Long short-term memory,长短期记忆) 是一种特殊的RNN,主要是为了解决长序列训练过程中梯度消失与梯度…

Linux中SELinux、Shell简介、touch命令的应用知识总结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Spark SQL的生命旅程之底层解析

一、内容提要一条SQL语句是如何被解析的&#xff1f;一条SQL是如何转换为代码被机器执行的&#xff1f;SQL从逻辑计划到物理计划的转换经历了怎样的优化&#xff1f;二、Antlr4Antlr4 Java编写的强大的语法解析生成器# 命令行使用方式 curl -O https://raw.githubusercontent.c…

【MyBatis持久层框架】核心配置文件详细解读

文章目录1. 前言2. 多环境配置3. 类型别名4. 对象工厂5. 总结1. 前言 前面我们在使用 MyBatis 开发时&#xff0c;编写核心配置文件替换 JDBC 中的连接信息&#xff0c;解决了 JDBC 硬编码的问题。其实&#xff0c;MyBatis 核心配置文件中还可以配置很多的内容。 MyBatis 的配…

微信小程序java+nodejs+vue校园美食点餐评论餐饮配送系统

开发语言&#xff1a;Java 小程序前端框架&#xff1a;uniapp 小程序运行软件&#xff1a;微信开发者 后端技术:Ssm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 基于校园餐饮配送小程序的设计基于现有的手机&#xff0c;可以实现首页、个人中心、学…

[JavaWeb]JS

目录1.JavaScript特点2. script 标签写JS代码2.1 script 标签中写JS代码2.2 使用 script 标签引入 JS 文件2.3 使用 js 的两种方式,是二选一,不能混用3. 查看 JS 错误信息3.1 chrome 浏览器查看错误信息3.2 Microsoft Edge浏览器查看错误信息4.JS变量4.1 var定义变量4.2 JavaSc…

Go 基础Interface

Go Interface 今天学习下Golang语言中Interface基本语法与使用&#xff0c;通过代码示例了解Go编程中的接口及其实现。跟Java语言类似&#xff0c;在Go编程中&#xff0c;开发者可以使用接口来存储一组没有实现的方法。也就是说&#xff0c;接口的方法不会有方法体。 接口定义…

谷歌正开发苹果AirTag的竞品,但苹果Find My需求强劲

据安卓爆料专家 Mishaal Rahman 的消息&#xff0c;谷歌似乎正在开发苹果 AirTag 的竞品。 从图中可以看到&#xff0c;谷歌 Fast Pair 蓝牙快速配对中&#xff0c;出现了一个名为“Locator tag&#xff08;定位器标签&#xff09;”的分类&#xff0c;这一类别此前没有出现过…

RXXW300/汇川MD500变频器MODBUS通信应用指导手册

本篇博客属于工具文档篇,方便大家查询通信相关的参数和MODBUS地址,有关PLC的MODBUS通信大家可以参看下面的文章链接: PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)_RXXW_Dor的博客-CSDN博客_modbus读写冲突MODBUS通讯非常简单、应用也非常广泛,有些老生…

51单片机多路电压检测数码管显示( proteus仿真+程序+报告+讲解视频)

51单片机多路电压检测数码管显示演示视频1.主要功能&#xff1a;2.仿真3. 程序4.设计报告系统需求及方案设计5. 设计资料内容清单51单片机多路电压检测数码管显示( proteus仿真程序报告讲解视频&#xff09;仿真图proteus 7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程…

MySQL从入门到精通(第二篇):MySQL的底层原理及其结构,结合多篇文章

Mysql进阶一、事务ACIDAUTOCOMMIT二、并发一致性问题1. 修改丢失三、封锁1. 封锁粒度2. 封锁类型读写锁意向锁3. 封锁协议1. 一级封锁协议2. 二级封锁协议3. 三级封锁协议4. 两段锁协议a. 概念b. 例子c. 两段锁是可串行化的充分条件d. 两段锁与死锁四、MySQL系统变量1. 查看系统…

苏嵌实训——day18

文章目录一 wirkeshark 抓包工具1.1 软件介绍1.2 软件安装1.3 wireshark工具的使用1.4 TCP三次握手和四次挥手二 TCP循环服务器2.1 IO多路复用2.2 使用select实现IO多路复用2.3 epoll一 wirkeshark 抓包工具 1.1 软件介绍 wireshark用于抓取经过我当前主机网卡的所有的数据包…

ffmpeg解封、解码实战

1 概述 2 解封装相关函数接口 avformat_alloc_context();负责申请一个AVFormatContext结构的内存,并进行简单初始化 avformat_free_context();释放该结构里的所有东西以及该结构本身 avformat_close_input();关闭解复用器。 avformat_open_input();打开输入视频文件 avformat_…

在elasticsearch中简单的使用script_fields

文章目录1、背景2、准备数据2.1 mapping2.2 插入数据3、案例3.1 格式化性别 1-男 2-女 -1-未知 如果不存在sex字段&#xff0c;则显示-- 其余的显示 **3.1.1 dsl3.1.2 java代码3.1.3 运行结果3.2 判断用户是否有某个爱好3.2.1 dsl3.2.2 java代码3.2.3 运行结果3.3 统计湖北的用…

Oracle 程序被编译后自动增加了AUTHID CURRENT_USER授权

目录 背景 原因&#xff1a; 解决方法 背景 今天遇到一个大坑&#xff0c;新建的一个数据库用户调用apps下的程序包&#xff0c;程序反馈未授权无法使用。 但是DBA确认已经给了授权。 查询授权表也是有正确授权的&#xff0c;但就是显示无效授权。 后来debug进去&#x…

外汇k线图经典图解:穿头破脚

从事外汇、黄金交易怎么能不懂K线图&#xff0c;学看K线图怎么能不把一些经典图解铭记心中呢&#xff1f;它们就好比字典和工具书&#xff0c;当投资者在解读行情时遇到任何困惑&#xff0c;都能从这些经典中得到指引&#xff0c;从而指明自己的投资方向。今天&#xff0c;小编…

java ssm校园二手书交易平台idea

该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;网络和Mysql数据库设计来实现的&#xff0c;网站主要包括学生注册、学生登录、浏览图书、搜索图书、查看图书并进行购买&#xff0c;对购买的图书进行确认收货、退款退货、查看个人信…