ROOM数据快速入门

news2025/1/11 22:48:45

ROOM数据库快速入门

文章目录

  • ROOM数据库快速入门
    • 第一章 准备工作
      • 第01节 引入库
      • 第02节 布局文件
      • 第03节 activity类
      • 第04节 效果图
    • 第二章 数据类
      • 第01节 实体类(表)
      • 第02节 数据访问类(DAO)
      • 第03节 数据Service层
      • 第04节 RoomDataBase 类

第一章 准备工作

第01节 引入库

build.gradle 文件当中添加

// 采用 Room 数据库的库
def room_version = "2.4.2" // 请检查最新版本
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // 对于 Java

// 采用rxjava的库(涉及到主线程和子线程的切换操作)
implementation 'io.reactivex.rxjava2:rxjava:2.2.19'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'



第02节 布局文件

<androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_insert_dept"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="添加数据 - 部门" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_delete_dept"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="删除数据 - 部门" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_update_dept"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="修改数据 - 部门" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_query_dept"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="查询数据 - 部门" />


        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_insert_employee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="添加数据 - 员工" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_delete_employee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="删除数据 - 员工" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_update_employee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="修改数据 - 员工" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/button_query_employee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="查询数据 - 员工" />


        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/text_view_show"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


</androidx.appcompat.widget.LinearLayoutCompat>



第03节 activity类

public class DemoTestActivity extends AppCompatActivity {

    private final Context context = DemoTestActivity.this;

    private AppCompatButton buttonInsertDept;
    private AppCompatButton buttonDeleteDept;
    private AppCompatButton buttonUpdateDept;
    private AppCompatButton buttonQueryDept;
    private AppCompatButton buttonInsertEmployee;
    private AppCompatButton buttonDeleteEmployee;
    private AppCompatButton buttonUpdateEmployee;
    private AppCompatButton buttonQueryEmployee;

    private AppCompatTextView textViewShow;

    private final Random random = new Random();
    private int indexDept = 1;
    private int indexEmployee = 1;


    private EntityService service;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo_test);

        buttonInsertDept = findViewById(R.id.button_insert_dept);
        buttonDeleteDept = findViewById(R.id.button_delete_dept);
        buttonUpdateDept = findViewById(R.id.button_update_dept);
        buttonQueryDept = findViewById(R.id.button_query_dept);
        buttonInsertEmployee = findViewById(R.id.button_insert_employee);
        buttonDeleteEmployee = findViewById(R.id.button_delete_employee);
        buttonUpdateEmployee = findViewById(R.id.button_update_employee);
        buttonQueryEmployee = findViewById(R.id.button_query_employee);

        textViewShow = findViewById(R.id.text_view_show);

        service = new EntityServiceImpl(context);
        // 初始化监听器
        initListener();
    }


    private void initListener() {
        buttonInsertDept.setOnClickListener(v -> {
            EntityDept dept = new EntityDept();
            dept.setDeptName("部门名称-" + indexDept);
            dept.setDeptNo(String.valueOf(indexDept));
            indexDept++;
            service.insertDept(dept)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });

        });

        buttonDeleteDept.setOnClickListener(v -> {
            service.deleteDept(1)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });
        });

        buttonUpdateDept.setOnClickListener(v -> {
            service.updateDeptName(2, "人事部")
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });
        });

        buttonQueryDept.setOnClickListener(v -> {
            service.findAllDept()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<List<EntityDept>>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(List<EntityDept> entityDeptList) {
                            StringBuilder sb = new StringBuilder();
                            for (EntityDept dept : entityDeptList) {
                                sb.append(dept.getId()).append("\t");
                                sb.append(dept.getDeptNo()).append("\t");
                                sb.append(dept.getDeptName()).append("\n");
                            }
                            textViewShow.setText(sb);
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });
        });

        buttonInsertEmployee.setOnClickListener(v -> {
            EntityEmployee employee = new EntityEmployee();
            employee.setName("员工名称-" + indexEmployee);
            employee.setAge(random.nextInt(20));
            employee.setEmployeeDeptId(random.nextInt(5));
            indexEmployee++;
            service.insertEmployee(employee)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });
        });

        buttonDeleteEmployee.setOnClickListener(v -> {
            service.deleteEmployee(1)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });
        });

        buttonUpdateEmployee.setOnClickListener(v -> {
            service.updateEmployeeName(2, "孙悟空")
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                        }

                        @Override
                        public void onError(Throwable e) {

                        }
                    });
        });

        buttonQueryEmployee.setOnClickListener(v -> {
            service.findAllEmployee()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<List<EntityEmployee>>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(List<EntityEmployee> entityEmployeeList) {
                            StringBuilder sb = new StringBuilder();
                            for (EntityEmployee employee : entityEmployeeList) {
                                sb.append(employee.getId()).append("\t");
                                sb.append(employee.getName()).append("\t");
                                sb.append(employee.getAge()).append("\t");
                                sb.append(employee.getEmployeeDeptId()).append("\n");
                            }
                            textViewShow.setText(sb);
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });
        });
    }
}



第04节 效果图

第一张表 和 数据库地址

第二张表 和 布局UI

备注:

​ 1、这里阅读数据库,采用的是 SQLiteStudio

​ 2、必须将 databases 当中的三个文件都导出,才能看到表结构

SQLiteStudio 的下载地址

https://github.com/pawelsalawa/sqlitestudio/releases





第二章 数据类

第01节 实体类(表)

表(部门)实体类

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "t_dept")
public class EntityDept {

    // 主键 自增长
    @PrimaryKey(autoGenerate = true)
    private int id;

    // 用户名
    @ColumnInfo(name = "dept_name")
    private String deptName;

    // 部门编号
    @ColumnInfo(name = "dept_no")
    private String deptNo;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getDeptNo() {
        return deptNo;
    }

    public void setDeptNo(String deptNo) {
        this.deptNo = deptNo;
    }
}

表(员工)实体类

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "t_employee")
public class EntityEmployee {

    // 主键 自增长
    @PrimaryKey(autoGenerate = true)
    private int id;

    // 员工姓名
    @ColumnInfo(name = "employee_name")
    private String name;

    // 员工年龄
    @ColumnInfo(name = "employee_age")
    private int age;

    // 所在部门的ID
    @ColumnInfo(name = "emp_dept_id")
    private int employeeDeptId;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getEmployeeDeptId() {
        return employeeDeptId;
    }

    public void setEmployeeDeptId(int employeeDeptId) {
        this.employeeDeptId = employeeDeptId;
    }
}



第02节 数据访问类(DAO)

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;

import java.util.List;


// DAO (Data Access Object) 提供了访问数据库的方法
@Dao
public interface EntityDao {

    // 增:添加部门信息
    @Insert
    void insertDept(EntityDept dept);

    // 删:删除数据
    @Query("DELETE FROM t_dept WHERE id = :deptId")
    void deleteDept(int deptId);

    // 改:修改数据
    @Query("UPDATE t_dept SET dept_name = :deptName WHERE dept_no = :deptNo")
    void updateDeptName(int deptNo, String deptName);

    // 查:查询数据
    @Query("SELECT * FROM t_dept")
    List<EntityDept> findAllDept();


    // 增:添加员工信息
    @Insert
    void insertEmployee(EntityEmployee employee);

    // 删:删除数据
    @Query("DELETE FROM t_employee WHERE id = :employeeId")
    void deleteEmployee(int employeeId);

    // 改:修改数据
    @Query("UPDATE t_employee SET employee_name = :employeeName WHERE id = :employeeId")
    void updateEmployeeName(int employeeId, String employeeName);

    // 查:查询数据
    @Query("SELECT * FROM t_employee")
    List<EntityEmployee> findAllEmployee();
}



第03节 数据Service层

接口

import java.util.List;

import io.reactivex.Completable;
import io.reactivex.Observable;

public interface EntityService {

    // 增:添加部门信息
    Completable insertDept(EntityDept dept);

    // 删:删除数据
    Completable deleteDept(int deptId);

    // 改:修改数据
    Completable updateDeptName(int deptNo, String deptName);

    // 查:查询数据
    Observable<List<EntityDept>> findAllDept();


    // 增:添加员工信息
    Completable insertEmployee(EntityEmployee employee);

    // 删:删除数据
    Completable deleteEmployee(int employeeId);

    // 改:修改数据
    Completable updateEmployeeName(int employeeId, String employeeName);

    // 查:查询数据
    Observable<List<EntityEmployee>> findAllEmployee();
}

实现类

import android.content.Context;

import java.util.List;

import io.reactivex.Completable;
import io.reactivex.Observable;

public class EntityServiceImpl implements EntityService {

    private Context context;

    public EntityServiceImpl(Context context) {
        this.context = context;
    }

    @Override
    public Completable insertDept(EntityDept dept) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().insertDept(dept);
            emitter.onComplete();
        });
    }

    @Override
    public Completable deleteDept(int deptId) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().deleteDept(deptId);
            emitter.onComplete();
        });
    }

    @Override
    public Completable updateDeptName(int deptNo, String deptName) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().updateDeptName(deptNo, deptName);
            emitter.onComplete();
        });
    }

    @Override
    public Observable<List<EntityDept>> findAllDept() {
        return Observable.create(emitter -> {
            List<EntityDept> list = AppDataBase.getDataBase(context).entityDao().findAllDept();
            emitter.onNext(list);
            emitter.onComplete();
        });
    }

    @Override
    public Completable insertEmployee(EntityEmployee employee) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().insertEmployee(employee);
            emitter.onComplete();
        });
    }

    @Override
    public Completable deleteEmployee(int employeeId) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().deleteEmployee(employeeId);
            emitter.onComplete();
        });
    }

    @Override
    public Completable updateEmployeeName(int employeeId, String employeeName) {
        return Completable.create(emitter -> {
            AppDataBase.getDataBase(context).entityDao().updateEmployeeName(employeeId, employeeName);
            emitter.onComplete();
        });
    }

    @Override
    public Observable<List<EntityEmployee>> findAllEmployee() {
        return Observable.create(emitter -> {
            List<EntityEmployee> list = AppDataBase.getDataBase(context).entityDao().findAllEmployee();
            emitter.onNext(list);
            emitter.onComplete();
        });
    }
}



第04节 RoomDataBase 类

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;

// RoomDataBase
@Database(entities = {EntityDept.class, EntityEmployee.class}, version = 1)
public abstract class AppDataBase extends RoomDatabase {

    private static final String DATA_BASE_NAME = "my_database.db";
    private static volatile AppDataBase INSTANCE;

    // 获取到 EntityDao 的对象
    public abstract EntityDao entityDao();

    public static AppDataBase getDataBase(Context context) {
        if (INSTANCE == null) {
            synchronized (AppDataBase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context, AppDataBase.class, DATA_BASE_NAME).build();
                }
            }
        }
        return INSTANCE;
    }
}







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

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

相关文章

达梦数据库DPI 实现两个数据库数据互通

链接字符串是目标访问链接 目标访问用户名 口令实现 31 里访问33库的数据 如果在31上建立视图访问33的某个表 AS SELECT SZZJ.sys_user.id FROM SZZJ.sys_userszzj31_szzj33;

护眼灯哪些牌子好?五款专业护眼灯品牌排行推荐

普通台灯长时间使用下来&#xff0c;眼睛疲劳、酸涩。但当作业或者工作没有做完的时候&#xff0c;还得硬着头皮撑着。大家是不是经常为这种事情发愁&#xff1f;于是&#xff0c;护眼台灯被设计出来了&#xff0c;但市面上出现的护眼台灯种类多&#xff0c;质量也是难以保证&a…

开发进度网站带后台源码

【源码介绍】 后台地址是&#xff1a;admin.php 后台没有账号密码 这个没有数据库 有能力的可以自己改 【搭建教程】 1.源码上传至虚拟机或者服务器 2.绑定域名和目录 3.访问域名安装&#xff0c; 4.安装完成后就行了 注&#xff1a;资源均网络搬运 仅供测试学习使用&#xff…

【数据结构与算法】队列(顺序存储)

队列 一.队列的原理二.队列的结构三.队列初始化四.判断队列是否满或空1.是否为满2.是否为空 五.入队操作六.队列的遍历七.出队操作1.前移2.后指 八.其他小接口1.获取队列首元素2.获取队列长度3.清除队列 酒.总结 一.队列的原理 队列也是一种线性结构,只不过是一种受限制的线性…

微服务面试-分布式 注册中心 远程调用 保护

标红的原理还是不太熟悉 重新看 分布式事务 CAP理论 Consistency&#xff08;一致性&#xff09; Availability&#xff08;可用性&#xff09; Partition tolerance &#xff08;分区容错性&#xff09; BASE 理论 就是做取舍 cap三选二 AT模式脏写 TCC模式 注册中…

25考研数据结构复习·6.4图的应用

最小生成树 Prim算法 从某一顶点开始构建生成树&#xff1b;每次将代价最小的新顶点纳入生成树&#xff0c;知道所有顶点都纳入为止。 时间复杂度O(|V|^2) 适合用于边稠密图 实现思想 从V0开始&#xff0c;总共需要n-1轮处理 每一轮处理&#xff1a;循环遍历所有结点&…

京东商品详情API:多规格商品的返回值处理

处理京东商品详情API中关于多规格商品的返回值&#xff0c;首先需要了解京东API的返回数据结构。通常&#xff0c;对于多规格商品&#xff08;如不同颜色、尺寸等选项的商品&#xff09;&#xff0c;API会返回一个包含多个规格选项和对应价格、库存等信息的复杂数据结构。 以下…

java中 VO DTO BO PO DAO

VO、DTO、BO、PO、DO、POJO 数据模型的理解和实际使用_vo dto bo-CSDN博客 深入理解Java Web开发中的PO、VO、DTO、DAO和BO概念_java dto dao-CSDN博客

汇凯金业:区块链的介绍和应用场景

区块链&#xff0c; 一个近年来炙手可热的技术名词&#xff0c; 它就像一颗耀眼的明星&#xff0c; 吸引着人们的目光&#xff0c; 引发着人们的思考。 究竟什么是区块链? 它为何能够引发如此巨大的关注? 它又将如何改变我们的未来? 一、 区块链&#xff1a; 去中心化的信任…

中仕公考:什么是事业编?

事业编制内的职员是指那些经过考试选拔&#xff0c;成功进入公共机构服务&#xff0c;同时在人事部门和组织部有正规记录的个体。 入职条件&#xff1a; 要求应聘者参与由事业单位举办的公开招聘考试。 管理方式&#xff1a; 事业编制内职员的人事管理由当地的人事部门或相…

02 RabbitMQ:下载安装

02 RabbitMQ&#xff1a;下载&安装 1. 下载&安装1.1. 官网1.2. Docker方式1.2.1. 下载镜像1.2.2. 启动1.2.3. 登录验证 1. 下载&安装 1.1. 官网 RabbitMQ: One broker to queue them all | RabbitMQ 1.2. Docker方式 1.2.1. 下载镜像 # docker pull 镜像名称[…

Windows API钩子

原文链接&#xff1a;https://www.cnblogs.com/zhaotianff/p/18073138 有前面的文章中&#xff0c;我介绍了一个Windows API的监控工具&#xff08;API Monitor&#xff09;的使用。它内部就是使用了Hook机制&#xff0c;能Hook Windows API&#xff0c;能在我们钩选的API函数…

C++必备知识--类和对象

类的定义 格式 class是类的关键字&#xff0c;Stack是类的名字(自己定义的)&#xff0c;在{}中定义类的主体。C中类的出现是为了替代C语言中的结构体&#xff0c;所以类的结构与结构体类似&#xff0c;{}之后需要加分号。类体中的内容称为类的成员&#xff0c;类中(声明)的变量…

国内优秀的消防报警设备企业「三江电子」×企企通启动采购数字化项目,共筑消防电子产品数字化新篇章

近日&#xff0c;深圳市高新投三江电子股份有限公司&#xff08;以下简称“三江电子”&#xff09;与企企通成功召开SRM采购供应链管理项目启动会。三江电子副总经理黄总、副总经理沈总、企企通高级副总裁徐总&#xff0c;以及双方项目负责人和项目组成员一同出席本次启动会。 …

AlmaLinux9安装中文语言包_zabbix没有中文语言包

更新你的系统包&#xff0c;如果系统最新可以忽略&#xff1a; sudo dnf update安装中文简体语言包 sudo yum install langpacks-zh_CN安装繁体中文包 sudo dnf install kde-l10n-Chinese-traditional安装完成后重启系统&#xff0c;以确保语言设置生效 设置系统为简体中文&…

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天&#xff0c;实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer&#xff08;ViT&#xff09;简介开始了解&#xff0c;模型结构&#xff0c;模型特点&#xff0c;实验的环境准备和数据读取&#xff0c;模型解析&#xff08…

Vue学习---vue 项目结构

这只是一个基础的目录结构&#xff0c;根据项目的复杂性和规模&#xff0c;可能会有所不同。 node_modules 项目依赖文件&#xff0c;其中包括很多基础依赖和自己安装的依赖。 public 存放公共资源和项目的主入口文件inde…

详细分析Sql Server索引的创建、查询、删除等基本知识(附Demo)

目录 前言1. 基本知识2. 索引2.1 创建2.2 删除2.3 查询 3. 总结 前言 原先分析过Sql的基本知识&#xff0c;感兴趣也可阅读&#xff1a; Mysql的两种存储引擎详细分析及区别&#xff08;全&#xff09;Mysql优化高级篇&#xff08;全&#xff09; 1. 基本知识 索引是在数据…

论文阅读-《Distant Supervision for Relation Extraction beyond the Sentence Boundary》

文章提出了首个将远程监督应用于跨句子关系提取的方法&#xff0c;通过整合句内和句间关系&#xff0c;利用图表示和多路径特征提取提高了准确性和鲁棒性。 摘要 文章提出了一种新的方法&#xff0c;用于在远程监督下进行跨句子的关系抽取。这种方法利用图表示来整合依赖和话…

滤芯材料做CE认证,按照什么EN标准测试?

要对滤芯材料进行CE认证&#xff0c;您需要遵循欧洲联盟的相关法规和标准。滤芯材料通常与产品安全性、电磁兼容性和环保性有关。以下是可能适用于滤芯材料的一些标准、要求和指令&#xff1a; 低电压指令(Low Voltage Directive&#xff0c;LVD)&#xff1a;滤芯材料通常包含电…