MySQL 的 C 语言接口

1. mysql_init

MYSQL *mysql_init(MYSQL *mysql);

mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。

mysql_init函数的参数:

① mysql:MYSQL 结构体指针,一般设置为 NULL 。

mysql_init函数的返回值:

① 成功,返回一个指向 MYSQL 对象的指针。

② 失败,返回 NULL 。

MYSQL 对象的定义如下:

typedef struct st_mysql

{

  NET                net;                        /* Communication parameters */

  unsigned char        *connector_fd;                /* ConnectorFd for SSL */

  char                *host,*user,*passwd,*unix_socket,*server_version,*host_info;

  char          *info, *db;

  struct charset_info_st *charset;

  MYSQL_FIELD        *fields;

  MEM_ROOT        field_alloc;

  my_ulonglong affected_rows;

  my_ulonglong insert_id;                /* id if insert on table with NEXTNR */

  my_ulonglong extra_info;                /* Not used */

  unsigned long thread_id;                /* Id for connection in server */

  unsigned long packet_length;

  unsigned int        port;

  unsigned long client_flag,server_capabilities;

  unsigned int        protocol_version;

  unsigned int        field_count;

  unsigned int         server_status;

  unsigned int  server_language;

  unsigned int        warning_count;

  struct st_mysql_options options;

  enum mysql_status status;

  my_bool        free_me;                /* If free in mysql_close */

  my_bool        reconnect;                /* set to 1 if automatic reconnect */

 

  /* session-wide random string */

  char                scramble[SCRAMBLE_LENGTH+1];

  my_bool unused1;

  void *unused2, *unused3, *unused4, *unused5;

 

  LIST  *stmts;                     /* list of all statements */

  const struct st_mysql_methods *methods;

  void *thd;

  /*

    Points to boolean flag in MYSQL_RES  or MYSQL_STMT. We set this flag

    from mysql_stmt_close if close had to cancel result set of this object.

  */

  my_bool *unbuffered_fetch_owner;

  /* needed for embedded server - no net buffer to store the 'info' */

  char *info_buffer;

  void *extension;

} MYSQL;

MYSQL 对象里有很多连接基本参数,它也包含了一个叫 st_mysql_methods 的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。

2. mysql_real_connect

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,

  const char *user,

  const char *passwd,

  const char *db,

  unsigned int port,

  const char *unix_socket,

  unsigned long clientflag);

mysql_real_connect函数的作用:连接数据库。

mysql_real_connect函数的参数:

① mysql:MYSQL 对象指针。

② host:要连接的 MySQL 服务器的 IP 地址。

③ user:用户名,以哪个用户身份连接。

④ passwd:用户密码。

⑤ db:要连接的数据库。

⑥ port:要连接的 MySQL 服务器的端口号。

⑦ unix_socket:通常设置为 NULL 。

⑧ clientflag:通常设置为 0 。

mysql_real_connect函数的返回值:

① 成功,返回一个指向 MYSQL 对象的指针,与第一个参数 mysql 的值相同。

② 失败,返回 NULL 。

3. mysql_close

void mysql_close(MYSQL *sock);

mysql_close函数的作用:关闭数据库连接。

mysql_close函数的参数:

① sock:MYSQL 对象指针。

mysql_close函数的返回值:无。

4. mysql_set_character_set

在连接数据库之后,需要先统一客户端和服务器的编码格式,避免在数据交互的过程中出现乱码。
int mysql_set_character_set(MYSQL *mysql, const char *csname);

mysql_set_character_set函数的作用:设置编码格式。

mysql_set_character_set函数的参数:

① mysql:MYSQL 对象指针。

② csname:要设置成哪种字符集。

mysql_set_character_set函数的返回值:

① 成功,为 0 。

② 失败,为非 0 。

5. mysql_query
int mysql_query(MYSQL *mysql, const char *q);

mysql_query函数的作用:下发 SQL 请求。

mysql_query函数的参数:

① mysql:MYSQL 对象指针。

② q:要执行的 SQL 语句(语句结尾可以不带分号)。

mysql_query函数的返回值:

① 成功,为 0 。

② 失败,为非 0 。

6. mysql_store_result
MYSQL_RES *mysql_store_result(MYSQL *mysql);

mysql_store_result函数的作用:获取查询结果。

mysql_store_result函数的参数:

① mysql:MYSQL 对象指针。

mysql_store_result函数的返回值:

① 成功,返回一个指向 MYSQL_RES 对象的指针。

② 失败,返回 NULL 。

该函数会调用 MYSQL 变量中的 st_mysql_methods 中对应的函数指针来获取查询结果。

该函数会 malloc 出一个 MYSQL_RES 结构体变量,将获取到的查询结果保存到该变量中,最后返回该变量的指针。

由于 MYSQL_RES 的内存空间是 malloc 出来的,所以在使用完之后一定要记得调用 free 函数(mysql_free_result函数)来释放对应的内存空间,否则会造成内存泄漏。

执行完mysql_store_result以后,其实要查询的数据都已经在 MYSQL_RES 变量中了,下面的函数基本就是读取 MYSQL_RES 中的数据,参数都是 MYSQL_RES 对象指针:

// 获取结果的行数

my_ulonglong mysql_num_rows(MYSQL_RES *res);

// 获取结果的列数

unsigned int mysql_num_fields(MYSQL_RES *res);

// 获取结果的列属性

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

// 获取结果中的一行记录

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

关于mysql_fetch_row函数的返回值 MYSQL_ROW:

MYSQL_ROW,即结果中的一行记录,对应着多个列信息,实际上就是一个字符串数组,因此,MYSQL_ROW 类型,本质就是 char** 类型,其定义如下:

typedef char **MYSQL_ROW;                /* return data as array of strings */

7.mysql_free_result()

void mysql_free_result(MYSQL_RES *result);

作用:用于释放前面 mysql_store_result 分配的内存。

三、使用示例

1.连接数据库和关闭数据库连接

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

const char host[] = "127.0.0.1";        // MySQL所在机器的ip

const int port = 0;                                        // MySQL所在机器的端口

const char db[] = "test";                        // 数据库名

const char user[] = "root";                        // 用户名

const char passwd[] = "test123";        // 用户密码

int main()

{

//1、获取MySQL实例(相当于创建了一个MySQL句柄)

MYSQL* ms = mysql_init(nullptr);

//2、连接数据库

if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {

printf("数据库连接失败!\n");

return 1;

}

printf("数据库连接成功!\n");

//3、访问数据库

//4、关闭数据库连接

mysql_close(ms);

printf("数据库连接关闭成功!\n");

return 0;

}

2.访问数据库

mysql_query

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1";        // MySQL所在机器的ip

const int port = 0;                                        // MySQL所在机器的端口

const char db[] = "test";                        // 数据库名

const char user[] = "root";                        // 用户名

const char passwd[] = "test123";        // 用户密码

 

int main()

{

//1、获取MySQL实例(相当于创建了一个MySQL句柄)

MYSQL* ms = mysql_init(nullptr);

 

//2、连接数据库

if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {

printf("数据库连接失败!\n");

return 1;

}

//设置连接的编码格式

mysql_set_character_set(ms, "utf8");

 

printf("数据库连接成功!\n");

 

//3. 访问数据库

//3.1 select 其实是最不好处理的!select sql执行完只是第一步,还需要对数据进一步解析

char sql[] = "select * from orderitems;";

int code = mysql_query(ms, sql);

if(code != 0){

printf("execute: %s failed\n", sql);

return 2;

}

printf("execute: %s success\n", sql);

 

//3.2 解析数据 -- 获取行号和列号

MYSQL_RES *result = mysql_store_result(ms);

int rows = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("行数:%d,列数:%d\n", rows, cols);

 

//3.3 解析数据 -- 获取表中列名 -- 一般不用,仅仅是为了测试代码的完整性

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(int i = 0; i < cols; i++){

printf("%s\t", fields[i].name);

}

printf("\n");

 

//3.4 解析数据 -- 获取表中的数据 -- 重要

for(int i = 0; i < rows; i++){

MYSQL_ROW line = mysql_fetch_row(result);  // 获取完整的一行记录(默认从前往后)

for(int j = 0; j < cols; j++){

printf("%s\t", line[j]);  // 将一行记录内部的多列字符串依次打印

}

printf("\n");

}

 

mysql_free_result(result); // 释放内存空间

 

//4、关闭数据库连接

mysql_close(ms);

printf("数据库连接关闭成功!\n");

return 0;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1";        // MySQL所在机器的ip

const int port = 0;                                        // MySQL所在机器的端口

const char db[] = "test";                        // 数据库名

const char user[] = "root";                        // 用户名

const char passwd[] = "test123";        // 用户密码

 

// 查询表的内容

int select(MYSQL* ms)

{

//3.1 select 其实是最不好处理的!select sql执行完只是第一步,还需要对数据进一步解析

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

if(code != 0){

printf("execute: %s failed\n", sql);

return 2;

}

printf("execute: %s success\n", sql);

 

//3.2 解析数据 -- 获取行号和列号

MYSQL_RES *result = mysql_store_result(ms);

int rows = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("行数:%d,列数:%d\n", rows, cols);

 

//3.3 解析数据 -- 获取表中列名 -- 一般不用,仅仅是为了测试代码的完整性

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(int i = 0; i < cols; i++){

printf("%s\t", fields[i].name);

}

printf("\n");

 

//3.4 解析数据 -- 获取表中的数据 -- 重要

for(int i = 0; i < rows; i++){

MYSQL_ROW line = mysql_fetch_row(result);  // 获取完整的一行记录(默认从前往后)

for(int j = 0; j < cols; j++){

printf("%s\t", line[j]);  // 将一行记录内部的多列字符串依次打印

}

printf("\n");

}

 

mysql_free_result(result); // 释放内存空间

return 0;

}

 

int main()

{

//1、获取MySQL实例(相当于创建了一个MySQL句柄)

MYSQL* ms = mysql_init(nullptr);

 

//2、连接数据库

if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {

printf("数据库连接失败!\n");

return 1;

}

//设置连接的编码格式

mysql_set_character_set(ms, "gb2312");

 

printf("数据库连接成功!\n");

 

//3. 访问数据库

select(ms);        

 

// insert 操作

char sql_insert[] = "insert into man values (\'小刚\', 19);";

int res = mysql_query(ms, sql_insert);

if(res != 0){

printf("execute: %s failed\n", sql_insert);

return 2;

}

printf("execute: %s success\n", sql_insert);

 

select(ms);

 

//4、关闭数据库连接

mysql_close(ms);

printf("数据库连接关闭成功!\n");

return 0;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1";        // MySQL所在机器的ip

const int port = 0;                                        // MySQL所在机器的端口

const char db[] = "test";                        // 数据库名

const char user[] = "root";                        // 用户名

const char passwd[] = "test123";        // 用户密码

 

// 查询表的内容

int select(MYSQL* ms)

{

//3.1 select 其实是最不好处理的!select sql执行完只是第一步,还需要对数据进一步解析

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

if(code != 0){

printf("execute: %s failed\n", sql);

return 2;

}

printf("execute: %s success\n", sql);

 

//3.2 解析数据 -- 获取行号和列号

MYSQL_RES *result = mysql_store_result(ms);

int rows = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("行数:%d,列数:%d\n", rows, cols);

 

//3.3 解析数据 -- 获取表中列名 -- 一般不用,仅仅是为了测试代码的完整性

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(int i = 0; i < cols; i++){

printf("%s\t", fields[i].name);

}

printf("\n");

 

//3.4 解析数据 -- 获取表中的数据 -- 重要

for(int i = 0; i < rows; i++){

MYSQL_ROW line = mysql_fetch_row(result);  // 获取完整的一行记录(默认从前往后)

for(int j = 0; j < cols; j++){

printf("%s\t", line[j]);  // 将一行记录内部的多列字符串依次打印

}

printf("\n");

}

 

mysql_free_result(result); // 释放内存空间

return 0;

}

 

int main()

{

//1、获取MySQL实例(相当于创建了一个MySQL句柄)

MYSQL* ms = mysql_init(nullptr);

 

//2、连接数据库

if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {

printf("数据库连接失败!\n");

return 1;

}

//设置连接的编码格式

mysql_set_character_set(ms, "gb2312");

 

printf("数据库连接成功!\n");

 

//3. 访问数据库

select(ms);        

 

// delete 操作

char sql_delete[] = "delete from man where name=\'小刚\'";

int res = mysql_query(ms, sql_delete);

if(res != 0){

printf("execute: %s failed\n", sql_delete);

return 2;

}

printf("execute: %s success\n", sql_delete);

 

select(ms);

 

//4、关闭数据库连接

mysql_close(ms);

printf("数据库连接关闭成功!\n");

return 0;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1";        // MySQL所在机器的ip

const int port = 0;                                        // MySQL所在机器的端口

const char db[] = "test";                        // 数据库名

const char user[] = "root";                        // 用户名

const char passwd[] = "test123";        // 用户密码

 

// 查询表的内容

int select(MYSQL* ms)

{

//3.1 select 其实是最不好处理的!select sql执行完只是第一步,还需要对数据进一步解析

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

if(code != 0){

printf("execute: %s failed\n", sql);

return 2;

}

printf("execute: %s success\n", sql);

 

//3.2 解析数据 -- 获取行号和列号

MYSQL_RES *result = mysql_store_result(ms);

int rows = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("行数:%d,列数:%d\n", rows, cols);

 

//3.3 解析数据 -- 获取表中列名 -- 一般不用,仅仅是为了测试代码的完整性

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(int i = 0; i < cols; i++){

printf("%s\t", fields[i].name);

}

printf("\n");

 

//3.4 解析数据 -- 获取表中的数据 -- 重要

for(int i = 0; i < rows; i++){

MYSQL_ROW line = mysql_fetch_row(result);  // 获取完整的一行记录(默认从前往后)

for(int j = 0; j < cols; j++){

printf("%s\t", line[j]);  // 将一行记录内部的多列字符串依次打印

}

printf("\n");

}

 

mysql_free_result(result); // 释放内存空间

return 0;

}

 

int main()

{

//1、获取MySQL实例(相当于创建了一个MySQL句柄)

MYSQL* ms = mysql_init(nullptr);

 

//2、连接数据库

if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {

printf("数据库连接失败!\n");

return 1;

}

//设置连接的编码格式

mysql_set_character_set(ms, "gb2312");

 

printf("数据库连接成功!\n");

 

//3. 访问数据库

select(ms);        

 

// update 操作

char sql_update[] = "update man set age = 20 where name=\'小明\'";

int res = mysql_query(ms, sql_update);

if(res != 0){

printf("execute: %s failed\n", sql_update);

return 2;

}

printf("execute: %s success\n", sql_update);

 

select(ms);

 

//4、关闭数据库连接

mysql_close(ms);

printf("数据库连接关闭成功!\n");

return 0;

}

  • 执行 update 操作:
  • 执行 delete 操作:
  • 执行 insert 操作:
  • 执行 select 操作:

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

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

相关文章

嵌入式芯片-NE555

目录 1、比较器&#xff08;运放&#xff09; 2、相反门&#xff08;非门&#xff09; 3、或非门 4、双稳态触发器 5、NE555功能框图 1、比较器&#xff08;运放&#xff09; 2、相反门&#xff08;非门&#xff09; 3、或非门 4、双稳态触发器 5、NE555功能框图

俞敏洪:董宇辉在北京有房子了!

据媒体报道&#xff0c;9月26日&#xff0c;俞敏洪在直播中透露&#xff0c;董宇辉已经在北京拥有了自己的房子&#xff0c;并且强调这是大家共同努力的结果。 这一消息引起了广泛关注和热议。在此之前&#xff0c;董宇辉曾在公开场合表示&#xff0c;俞敏洪老师为了给他凑钱买…

数据库索引失效

索引失效是指数据库查询在执行过程中无法有效利用索引&#xff0c;导致查询性能下降或索引无法被使用的情况&#xff0c;以下是常见的导致索引失效的原因&#xff1a; 模糊查询以通配符开头&#xff0c;自己都不知道具体要查什么&#xff0c;怎么使用索引呢&#xff0c;所以会导…

输送机使用的常见误区

输送机也称流水线&#xff0c;是指在自动化生产过程中起到运输货物&#xff0c;联通各个生产设备的主要机械设备。但在使用的过程中&#xff0c;很多用户对于输送机的使用存在一定的误区&#xff0c;导致设备故障频出&#xff0c;下面就针对用户已在使用输送机过程中的常见误区…

Android Studio 创建项目不自动生成BuildConfig文件

今天在AS上新建项目发现找不到BuildConfig文件&#xff0c;怎么clear都不行。通过多方面查找发现原来gradle版本不同造成的&#xff0c;Gradle 8.0默认不生成 BuildConfig 文件。 如上图&#xff0c;8.0版本是没有source文件夹 上图是低于8.0版本有source文件夹 针对这个问题&…

基于若依框架进行二次开发优化指南

背景 若依&#xff08;RuoYi&#xff09;开源框架是一个功能强大的Java开发框架&#xff0c;专注于快速构建企业级后台管理系统。它提供了一套丰富的功能和模块&#xff0c;可以帮助开发人员快速搭建稳定、高效的管理系统。本篇博客将大家了解若依框架的基本概念和使用方法&am…

云原生Kubernetes:对外服务之 Ingress

目录 一、理论 1.Ingress 2.部署 nginx-ingress-controller(第一种方式) 3.部署 nginx-ingress-controller(第二种方式) 二、实验 1.部署 nginx-ingress-controller(第一种方式) 2.部署 nginx-ingress-controller(第二种方式) 三、问题 1.启动 nginx-ingress-controll…

Selenium Web自动化测试 —— 高级控件交互方法!

一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&#xff08;了解即可&#xff09; https://www.selenium.dev/documentation/webdriver/actions_api 二、ActionChains解析 实例…

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录 一、环境准备二、基础软件三、扩展&#xff1a;usb拓展插件 一、环境准备 1、下载VMware虚拟机的壳子&#xff0c;安装并注册软件(可以百度注册码)&#xff0c;最新版本&#xff1a;v17 2、下MacOS系统iOS镜像文件&#xff0c;用于vmware虚拟机安装&#xff0c;当前镜…

油猴(篡改猴)学习记录

第一个Hello World 注意点:默认只匹配了http网站,如果需要https网站,需要自己添加match https://*/*代码如下 这样子访问任意网站就可以输出Hello World // UserScript // name 第一个脚本 // namespace http://tampermonkey.net/ // version 0.1 // descri…

ElasticSearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;…

钢轨长度及允许偏差

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…

MySQL ——多表连接查询

一、&#xff08;左、右和全&#xff09;连接概念 内连接&#xff1a; 假设A和B表进行连接&#xff0c;使用内连接的话&#xff0c;凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分&#xff0c;两张表是平等的。 关键字&#xff1a;inner join on 语句&#xf…

css实现Chrome标签栏

如图这是一个特殊的带有圆角的导航栏&#xff0c;实现这种效果并不难 这是我实现的效果&#xff1a; 淡一点的就是鼠标悬停的样式 以下是代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结…

使用 PyTorch 的计算机视觉简介 (3/6)

一、说明 在本单元中&#xff0c;我们将了解卷积神经网络&#xff08;CNN&#xff09;&#xff0c;它是专门为计算机视觉设计的。 卷积层允许我们从图像中提取某些图像模式&#xff0c;以便最终分类器基于这些特征。 二、卷积神经网络 计算机视觉不同于通用分类&#xff0c;因…

echarts 地图 visualMap 图例点击事件监听

一、切换位置 二、切换监听 // 切换事件监听 this.myChart.off(datarangeselected); // 为了不触发两次 this.myChart.on(datarangeselected,(e) > {// visualMap change });// 配置如下 visualMap: {type: piecewise,showLabel: true,inverse: true,pieces: [{value: 1,…

为什么大力推行国密算法SSL证书

国密算法SSL证书是一种采用我国自主研发的SM2公钥算法体系&#xff0c;支持SM2、SM3、SM4等国产密码算法及国密SSL安全协议的数字证书。相比于普通SSL证书&#xff0c;国密SSL证书具有以下特点&#xff1a; 自主可控&#xff1a;国密SSL证书采用我国自主研发的SM2公钥算法体系&…

STM32实现PMBus从机程序

最近在野火的STM32F103VET6开发板上实现PMBus从机程序&#xff0c;这个程序参考了以下这篇博客的关于使用中断法实现I2C从机程序&#xff1a;STM32设置为I2C从机模式_iic从机_柒壹漆的博客-CSDN博客 &#xff0c;实测这个程序是可以正常运行的&#xff0c;感谢博主的分享&#…

对标8155体验,降本20%以上!这家企业用“量产”证明

智能座舱逐渐成为智能汽车标配。 根据高工智能汽车研究院监测的数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车搭载智能数字座舱&#xff08;大屏语音车联网OTA&#xff09;前装标配交付795.05万辆&#xff0c;同比增长40.59%&#xff0c;前装搭…