Linux下MySQL的简单使用

Linux下MySQL的简单使用

  • 导语
  • MySQL安装与配置
    • MySQL安装
    • 密码设置
  • MySQL管理
    • 命令
      • myisamchk
      • mysql
      • 其他
    • 常见操作
  • C语言访问MYSQL
    • 连接例程
    • 错误处理
    • 使用SQL
  • 总结
  • 参考文献

导语

这一章是MySQL的使用,一些常用的MySQL语句属于本科阶段内容,然后是C语言和MySQl之间的交互,可以看到C语言已经有成熟的和MySQL的接口

MySQL安装与配置

MySQL安装

MySQL的安装很简单,只需要执行几个shell命令就行,需要注意的是,对于Ubuntu新机器来说最好不要一开始就执行sudo apt update,因为很多包之间的依赖是复杂且未知的,如果直接全部更新可能会导致在跟书上同步实验时出问题(命令参考了ubuntu 23.10.1 mysql 安装)

sudo apt install mysql-server -y#这里就安装好了服务器
systemctl start mysql#开启mysql服务
systemctl status mysql#检查状态,如果出现mysql>就没问题sudo mysul -u root mysql#进入mysql
ps -el | grep mysqld#可以看mysql是否启动

下面这个是备选方案,是在新机器上装的

sudo apt-get update
sudo apt-get install libmysqlclient-dev
mysql_config --cflags
mysql_config --libs

后两条命令是检测MySQL Connector/C是否安装完成,由于新版本的MySQL已经不支持书上的写法,所以需要安装这个包,正常应该显示如下图

在这里插入图片描述

之后直接安装服务器即可

sudo apt-get update
sudo apt-get install mysql-server

通过下面的程序验证安装是否成功

#include <stdio.h>
#include <mysql/mysql.h>int main() {MYSQL *conn;conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return EXIT_FAILURE;}if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return EXIT_FAILURE;}printf("Connected to the database successfully!\n");mysql_close(conn);return EXIT_SUCCESS;
}

执行的命令和结果如下

gcc -o test_program test_program.c $(mysql_config --cflags) $(mysql_config --libs)

在这里插入图片描述

密码设置

一开始的root是没有密码的,可以通过命令查看各用户的密码如下,可以看到root密码为空

在这里插入图片描述

这里需要注意的是新版的MySQL和老版的不一样,新版本的password列改成了authentication_string

可以执行命令来设置密码,修改后查看,可以看到root有密码,但是被MySQL加密过了,再次登录时直接回车发现无法识别,只有输入密码才能识别用户

在这里插入图片描述

这里我们删除除去root之外的默认用户,并且删除从localhost以外任何主机的登录

在这里插入图片描述

到此为止,我们有了一个运行的MySQL,该MySQL只有设定密码的root通过本地才能连接,为了方便后续的操作,这里创建一个普通用户rick,它将能用三种方法来连接MySQL(本地连接,从IP连接,从wiley.com域中任何机器连接)

首先为rick创建一个本地登录,这里书上给的代码太老了,已经不适配现在的MySQL,更改成了现在版本的,最新的 MySQL 版本中,GRANT 语句不再用于设置用户密码。密码应该通过单独的 CREATE USER 或 SET PASSWORD 语句来设置。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

通过三种不同的方式设置了三个用户,可以通过select命令展示,可以看到三种方式都成功了,并且rick的权利很大

在这里插入图片描述

MySQL管理

命令

所有命令都接受三个标准参数

-u 用于指定用户(用户名)
-p 用于提示密码(如果在命令行中未直接提供)
-h 用于指定主机(MySQL 服务器地址)

除了标准参数之外,每个命令还有自己的命令选项

myisamchk

通常情况下,myisamchk以创建的mysql用户运行并且工作目录为数据表在的目录中,常见的命令选项有

-c 检查表以发现错误
-e 执行扩展检查
-r 修复发现的错误

mysql

使用mysql可以不经过MySQL的控制台完成很多功能,通过在命令行最后添加数据库名称作为参数即可,可以通过 mysql --help | less来查看所有的命令行选项列表

其他

还有一些其他的命令,如mysqladmin、mysqlbug等,由于MySQL已经相对于书上更新很多了,所以很多命令已经过时,在此不多赘述

常见操作

书上提供的常见操作包括grant、revoke以及数据类型等,这些属于本科阶段SQL的基本内容,在此不再赘述,跳过

C语言访问MYSQL

连接例程

C语言连接MySQL需要先初始化一个连接句柄结构,然后再进行实际的连接,句柄通过mysql_init函数初始化,函数原型具体如下,mysql_init() 函数通常是在使用 MySQL 客户端 API 进行数据库编程时的第一个步骤。它为连接操作做了准备,确保在进行连接操作之前,连接对象处于一个已初始化的状态

MYSQL *mysql_init(MYSQL *);
//mysql:一个指向 MYSQL 结构体的指针。如果该指针为空,
//mysql_init() 将分配一个新的 MYSQL 结构体并返回它。如果提供了一个非空指针,它会用新的数据初始化该对象

真正与数据库进行连接的是mysql_real_connect函数,函数原型如下

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *dbname, unsigned int port, const char *unix_socket, unsigned long client_flag);
//mysql是初始化之后的句柄

还有例程函数和关闭函数,在此不赘述

现在尝试创立一个数据库,向其中填入数据并通过C语言访问它

在这里插入图片描述

逐行输入对数据库的操作比较麻烦,并且容易出错,可以把要执行的命令单独做成文件,然后直接导入执行

-- Create the table childrenCREATE TABLE children (childno int(11) NOT NULL auto_increment,fname varchar(30),age int(11),PRIMARY KEY (childno)
);-- Populate the table 'children'INSERT INTO children (childno, fname, age) VALUES (1, 'Jenny', 21);
INSERT INTO children (childno, fname, age) VALUES (2, 'Andrew', 17);
INSERT INTO children (childno, fname, age) VALUES (3, 'Gavin', 8);
INSERT INTO children (childno, fname, age) VALUES (4, 'Duncan', 6);
INSERT INTO children (childno, fname, age) VALUES (5, 'Emma', 4);
INSERT INTO children (childno, fname, age) VALUES (6, 'Alex', 15);
INSERT INTO children (childno, fname, age) VALUES (7, 'Adrian', 9);

在这里插入图片描述
在这里插入图片描述

可以看到数据都被成功插入了

之后可以通过上述函数来连接数据库,由于系统和包之间的依赖问题以及mysql的版本问题,导致这个程序无法在旧机上运行,暂时没有找到解决方案,在新机上可以运行,运行结果和程序如下

#include <stdlib.h>
#include <stdio.h>
#include <mysql/mysql.h>  // 包含新版 MySQL Connector/C 的头文件int main(int argc, char *argv[])
{MYSQL *con;// 初始化 MySQL 连接句柄con = mysql_init(NULL);if (con == NULL) {fprintf(stderr, "mysql_init() failed\n");return EXIT_FAILURE;}// 连接数据库if (mysql_real_connect(con, "localhost", "rick", "111111", "foo", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed\n");fprintf(stderr, "Error: %s\n", mysql_error(con));mysql_close(con);return EXIT_FAILURE;}// 输出连接成功状态printf("Connected successfully!\n");// 关闭连接mysql_close(con);return EXIT_SUCCESS;
}

在这里插入图片描述

执行的时候需要添加对应的inlcude路径和库文件路径

错误处理

MySQL使用一系列由连接句柄结构报告的返回码来获取错误信息,具体的函数原型如下

unsigned int mysql_errno(MYSQL *connection);
//返回错误码
char *mysql_error(MYSQL *connection);
//返回有意义的文本信息

这里是书上给出的一个例子以及运行结果,可以看到屏幕上输出了错误信息

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>int main(int argc, char *argv[]) {MYSQL my_connection;mysql_init(&my_connection);if (mysql_real_connect(&my_connection, "localhost", "rick", "I do not know", "foo", 0, NULL, 0)) {printf("Connection success\n");mysql_close(&my_connection);} else {fprintf(stderr, "Connection failed\n");if (mysql_errno(&my_connection)) {fprintf(stderr, "Connection error %d: %s\n",mysql_errno(&my_connection), mysql_error(&my_connection));}}return EXIT_SUCCESS;
}

在这里插入图片描述

使用SQL

这里直接给出一些C语言执行SQL语句的函数原型和简单解释

int mysql_query(MYSQL *connection, const char *query);
//第一个是初始化后的句柄,第二个是sql语句,返回错误码
my_ulonglong mysql_affected_rows(MYSQL *connection);
//查询上一条指令运行后影响了多少行

书上给出了一个使用AUTO_INCREMENT的代码实例,下面是修改后的程序和运行结果,AUTO_INCREMENT对每次插入的数据分配一个新的id值并进行追踪

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>#define DB_HOST "localhost"
#define DB_USER "rick"  // 用户名 'rick'
#define DB_PASS "111111" // 数据库密码
#define DB_NAME "foo" // 数据库名称 'foo'// 错误处理函数,减少冗余代码
void handle_error(MYSQL *connection, const char *message) {fprintf(stderr, "%s\nError %d: %s\n", message, mysql_errno(connection), mysql_error(connection));mysql_close(connection);exit(EXIT_FAILURE);
}int main(int argc, char *argv[]) {MYSQL my_connection;MYSQL_RES *res_ptr;MYSQL_ROW sqlrow;int res;// 初始化 MySQL 连接对象mysql_init(&my_connection);// 连接数据库if (!mysql_real_connect(&my_connection, DB_HOST, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0)) {handle_error(&my_connection, "Connection failed");}printf("Connection success\n");// 插入数据到表中res = mysql_query(&my_connection, "INSERT INTO children(fname, age) VALUES('Robert', 7)");if (res) {handle_error(&my_connection, "Insert error");} else {printf("Inserted %lu rows\n", (unsigned long)mysql_affected_rows(&my_connection));}// 查询最后插入的数据res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID()");if (res) {handle_error(&my_connection, "SELECT error");}// 获取查询结果res_ptr = mysql_use_result(&my_connection);if (res_ptr) {// 迭代结果集并输出while ((sqlrow = mysql_fetch_row(res_ptr))) {printf("We inserted childno %s\n", sqlrow[0]);}// 释放结果集mysql_free_result(res_ptr);} else {fprintf(stderr, "Failed to retrieve result set.\n");}// 关闭连接mysql_close(&my_connection);return EXIT_SUCCESS;
}

可以看到成功插入了一行,并且通过LAST_INSERT_ID拿到了ID

在这里插入图片描述

这里附上书上数据对应的插入代码

-- Create the table childrenCREATE TABLE children (childno INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,fname VARCHAR(30),age INT
);-- Populate the table 'children'INSERT INTO children (fname, age) VALUES ('Jenny', 21);
INSERT INTO children (fname, age) VALUES ('Andrew', 17);
INSERT INTO children (fname, age) VALUES ('Gavin', 8);
INSERT INTO children (fname, age) VALUES ('Duncan', 6);
INSERT INTO children (fname, age) VALUES ('Emma', 4);
INSERT INTO children (fname, age) VALUES ('Alex', 15);
INSERT INTO children (fname, age) VALUES ('Adrian', 9);
INSERT INTO children (fname, age) VALUES ('Ann', 3);
INSERT INTO children (fname, age) VALUES ('Ann', 4);
INSERT INTO children (fname, age) VALUES ('Ann', 3);
INSERT INTO children (fname, age) VALUES ('Ann', 4);

除了上述两个基本的函数之外还有一些其他的函数,函数原型如下

MYSQL_RES *mysql_store_result(MYSQL *connection);
//从返回数据的语句中提取所有的数据,返回一个指向结果集的指针
my_ulonglong mysql_num_rows(MYSQL_RES *result);
//统计返回结果中的行数
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
//从结果集中提取一行,把这一行放在行机构里,每次使用一个
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
//在结果集中跳转,第二个参数是行号,设置下一个被fetch操作返回的行
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
//返回一个偏移值,表示结果集中的当前位置(不是行号)
void mysql_free_result(MYSQL_RES *result);
//对结果集的操作完成后,需要调用这个函数清理已经分配的对象
MYSQL_RES *mysql_use_result(MYSQL *connection);
//提取一行数据,返回指向对象的指针,不会缓存
//适合处理大数据量的查询结果,因为它允许逐行读取而不会将所有行一次性加载到内存中,这样可以有效减少内存的使用
unsigned int mysql_field_count(MYSQL *connection);
//获取最近一次查询的结果集中字段(列)的数量
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
//用于从查询结果的字段列表中获取每个字段的描述信息,类似于字段的元数据。
//返回一个指向 MYSQL_FIELD 结构体的指针,这个结构体包含了字段的详细信息(例如字段名、类型等)。

下面是书上给出的一个综合程序(用chatgpt优化了),基本上用到了上面的所有函数,还有运行结果和具体的程序解释

#include <stdlib.h>
#include <stdio.h>
#include <mysql.h>// MySQL 连接对象和结果集
MYSQL my_connection;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;// 函数声明
void display_header();
void display_row();int main(int argc, char *argv[]) {int res;int first_row = 1;  // 用于确保我们只显示一次表头// 初始化 MySQL 连接对象mysql_init(&my_connection);// 尝试连接到数据库if (mysql_real_connect(&my_connection, "localhost", "rick", "111111", "foo", 0, NULL, 0)) {printf("Connection success\n");// 执行 SQL 查询,选择年龄大于 5 的记录res = mysql_query(&my_connection, "SELECT childno, fname, age FROM children WHERE age > 5");if (res) {// 查询执行失败,打印错误信息fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));} else {// 使用 mysql_store_result() 获取结果集到内存res_ptr = mysql_store_result(&my_connection);if (res_ptr) {// 获取每行的数据并显示while ((sqlrow = mysql_fetch_row(res_ptr))) {if (first_row) {// 首次显示表头display_header();first_row = 0;}// 显示每行数据display_row();}// 释放结果集资源mysql_free_result(res_ptr);} else {// 获取结果集失败,打印错误信息fprintf(stderr, "Failed to retrieve result set: %s\n", mysql_error(&my_connection));}}// 关闭数据库连接mysql_close(&my_connection);} else {// 连接失败,打印错误信息fprintf(stderr, "Connection failed\n");if (mysql_errno(&my_connection)) {fprintf(stderr, "Connection error %d: %s\n",mysql_errno(&my_connection), mysql_error(&my_connection));}}return EXIT_SUCCESS;
}// 显示表头,列出字段名称及其相关属性
void display_header() {MYSQL_FIELD *field_ptr;//获得列名printf("Column details:\n");while ((field_ptr = mysql_fetch_field(res_ptr)) != NULL) {// 显示字段的名称printf("\t Name: %s\n", field_ptr->name);printf("\t Type: ");// 判断字段类型并显示if (IS_NUM(field_ptr->type)) {//数字printf("Numeric field\n");} else {switch (field_ptr->type) {//字符串case FIELD_TYPE_VAR_STRING:printf("VARCHAR\n");break;case FIELD_TYPE_LONG:printf("LONG\n");break;default:printf("Type is %d, check in mysql_com.h\n", field_ptr->type);}}// 显示字段的最大长度printf("\t Max width %ld\n", field_ptr->length);// 检查字段是否具有 AUTO_INCREMENT 属性if (field_ptr->flags & AUTO_INCREMENT_FLAG) {printf("\t Auto increments\n");}printf("\n");}
}// 显示查询结果的每一行
void display_row() {unsigned int field_count;// 遍历每一列,打印其值field_count = 0;while (field_count < mysql_num_fields(res_ptr)) {//如果域名数量比当前索引大if (sqlrow[field_count]) {//sqlrow存了这一行的数据printf("%s ", sqlrow[field_count]);} else {printf("NULL ");}field_count++;}printf("\n");
}

在这里插入图片描述

还有更多的函数,在此不再赘述,可以查看MYSQL手册相关

总结

可以看到C语言已经有了很成熟的与MySQL交互的接口,并且大部分函数的使用是和MySQL版本不相关的,但实际在Ubuntu运行的时候还是需要注意MySQL的版本和包的问题,因为新版本的MySQL库修改了一些配置文件的位置和相关的依赖包

参考文献

  1. ubuntu 23.10.1 mysql 安装
  2. ChatGPT

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention

Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…

从0开始学PHP面向对象内容之(常用魔术方法续一)

常用魔术方法&#xff08;续&#xff09; 上期我们讲到几个常用的魔术方法&#xff0c;但是由于篇幅过程且全是文字性质地东西&#xff0c;就没写完&#xff0c;篇幅太长也会丧失阅读兴趣&#xff0c;我尽量控制一篇文章在5000字左右 一、__isset()&&__unset() 1、在…

【MySQL】数据库知识突破:数据类型全解析与详解

前言&#xff1a;本节内容讲述MySQL的数据类型&#xff0c; 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作&#xff0c; 并没有对数据的内容进行操作&#xff0c;所以它叫做DDL。另外&#xff0c;还有…

windows 11编译安装ffmpeg(包含ffplay)

一、源码及安装包下载 1.1&#xff0c;ffmpeg源码包下载 下载地址&#xff1a;Download FFmpeg 1.2&#xff0c;mysys下载 下载地址&#xff1a;MSYS2 1.3&#xff0c;libx264源码包下载 下载地址&#xff1a;x264, the best H.264/AVC encoder - VideoLAN 二、软件安装 2.1&…

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序&#xff0c;比如时间序列数据&#xff08;股票价格、天气变化等&#xff09;、自然语言文本&#xff08;句子中的单词顺序&#xff09;、语音信号等。 1 统计工具 前面介绍…

【考研数学:高数2】数列极限

目录 前言 一、数列极限的概念 1.常见前n项和 2.等差、等比数列 3.数列的性质 &#xff08;1&#xff09;单调性 &#xff08;2&#xff09;有界性 二、数列极限的定义 三、收敛数列的性质 1.概念 2.例题 四、极限的四则运算 五、海涅定理&#xff08;归结原则&…

计算机网络分析题

网络的布置 根据具体需求布置网络 第二小题、网络的划分 根据路由表作出路由器拓扑图 ARP跨网络寻址 TCP报文段格式概念 网桥的转发表与动作 网络嗅探报文 十六进制化作十进制 嗅探以太网帧首部 除MAC帧以外&#xff0c;其他各层协议数据单元都是源地址在前&#xff0c;目…

PHP爬虫快速获取京东商品详情(代码示例)

在当今互联网时代&#xff0c;数据的重要性不言而喻。对于电商领域来说&#xff0c;获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫&#xff0c;以快速获取京东商品的详情信息。 1. 概述 京东是中国领先的电商平台之一&#xff…

快速学习Serde包实现rust对象序列化

在处理HTTP请求时&#xff0c;我们总是需要在数据结构对象&#xff08;可以是enum、struct等&#xff09;和序列化数据格式&#xff08;例如JSON&#xff0c;用与存储或传输&#xff0c;并可以反序列化的格式&#xff09;之间来回转换。 Serde是一个库&#xff08;crate&#x…

OLED 显示画面的变换操作——上下、左右翻转

OLED 画面旋转 OLED 写入函数定义 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常OLED 显示界面转换函数如下 void OLED_DisplayTurn(u8 i) {if(i0…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容&#xff0c;但是发现许多不方便的地方。 休息的时候收听喜马拉雅&#xff0c;但是还需要不断地选择喜马拉雅的内容&#xff0c;比较麻烦&#xff0c;而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

luckfox-pico-max学习记录

0.文件编译及烧录 SDK包在文件夹/home/tao/linux/luckfox/luckfox-pico-spi应用程序样例在文件夹/home/tao/linux/luckfox-pico-spi/demo编译&#xff1a;sudo ./build.sh生成的镜像文件在./luckfox-pico-spi/output/image中&#xff0c;将所有文件复制到windows电脑文件夹I:\…

一文了解珈和科技在农业遥感领域的服务内容和能力

2020年&#xff0c;农业农村部、中央网信办联合印发了《数字农业农村发展规划&#xff08;2019-2025年&#xff09;》&#xff0c;对数字农业农村建设作出了具体部署。其中&#xff0c;农业遥感作为推进数字农业农村的重要力量贯穿《规划》始终。 今年10月&#xff0c;农业农村…

羊城杯2020Easyphp

审题 看到url&#xff0c;可以想到伪协议读取 尝试过后可以发现&#xff0c;题目绕过了read后面的编码 我们可以尝试双重urlencode进行绕过 ?filephp://filter/read%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%…

【时间之外】IT人求职和创业应知【34】-人和机器人,机器人更可靠

目录 新闻一&#xff1a;人形机器人产业持续高速增长&#xff0c;2026年中国市场规模将突破200亿元 新闻二&#xff1a;AI技术驱动设备厂商格局变化&#xff0c;部分厂商市占率快速提升 新闻三&#xff1a;华为与江淮汽车携手打造超高端品牌“尊界”&#xff0c;计划于明年春…

Linux——基础指令2 + 权限

目录 1.zip/unzip 2.tar 3.bc 4.uname –r 5.重要的几个热键 6.扩展命令 7.shell命令以及运行原理 8.Linux权限的理解 关于权限的三个问题&#xff1a; 1.目录权限 2.缺省权限 3.粘滞位 1.zip/unzip 打包、压缩&#xff1a;使用特定的算法&#xff0c;文件进行合…

pgsql和mysql的自增主键差异

1. 当有历史数据存在时&#xff0c; mysql的自增主键是默认从最大值自增。 pgsql的自增主键取初始值开始逐个尝试&#xff0c;所以存在可能与历史数据的主键重复的情况。 pgsql解决上述问题的方式&#xff1a;重设自增值。 SELECT SETVAL(t_db_filed_id_seq, (SELECT MAX(&q…

【Linux】基础IO及文件描述符相关内容详细梳理

0. C语言文件I/O 在C语言中&#xff0c;我们学习了相关函数来读写文件&#xff0c;例如&#xff1a;fopen&#xff0c;fwrite&#xff0c;fread&#xff0c;fprintf等&#xff0c; 在C语言中文件的打开方式&#xff1a; r Open text file for reading. …

大语言模型在序列推荐中的应用

一、简介 序列推荐技术通过分析用户的过往交互历史&#xff0c;能够有效挖掘出用户可能感兴趣的项目&#xff0c;对于提升各类应用的服务质量具有重要作用。近期&#xff0c;大语言模型&#xff08;LLMs&#xff09;的发展在应对复杂的推荐问题上展现出了显著的优势。不过&…

JavaScript——函数、事件与BOM对象

一、系统函数(JS中预置的函数) JS的预置函数在遇到非数字字符时会停止解析 parseInt 转整型 parseFloat 转浮点型 isNaN !isNaN("10") 检测是否纯数字 eval 把字符串转成算式并计算 1.parseInt(string, radix); 语法&#xff1a; string&#x…