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

ROOM数据快速入门

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.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_insert_dept"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="添加数据 - 部门" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_delete_dept"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="删除数据 - 部门" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_update_dept"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="修改数据 - 部门" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_query_dept"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="查询数据 - 部门" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_insert_employee"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="添加数据 - 员工" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_delete_employee"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="删除数据 - 员工" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_update_employee"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="修改数据 - 员工" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/button_query_employee"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="查询数据 - 员工" /><androidx.appcompat.widget.AppCompatTextViewandroid: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;@Overrideprotected 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() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonDeleteDept.setOnClickListener(v -> {service.deleteDept(1).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new CompletableObserver() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonUpdateDept.setOnClickListener(v -> {service.updateDeptName(2, "人事部").observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new CompletableObserver() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonQueryDept.setOnClickListener(v -> {service.findAllDept().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<List<EntityDept>>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic 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);}@Overridepublic void onError(Throwable e) {}@Overridepublic 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() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonDeleteEmployee.setOnClickListener(v -> {service.deleteEmployee(1).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new CompletableObserver() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonUpdateEmployee.setOnClickListener(v -> {service.updateEmployeeName(2, "孙悟空").observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new CompletableObserver() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {}});});buttonQueryEmployee.setOnClickListener(v -> {service.findAllEmployee().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<List<EntityEmployee>>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic 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);}@Overridepublic void onError(Throwable e) {}@Overridepublic 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 {// 增:添加部门信息@Insertvoid 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();// 增:添加员工信息@Insertvoid 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;}@Overridepublic Completable insertDept(EntityDept dept) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().insertDept(dept);emitter.onComplete();});}@Overridepublic Completable deleteDept(int deptId) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().deleteDept(deptId);emitter.onComplete();});}@Overridepublic Completable updateDeptName(int deptNo, String deptName) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().updateDeptName(deptNo, deptName);emitter.onComplete();});}@Overridepublic Observable<List<EntityDept>> findAllDept() {return Observable.create(emitter -> {List<EntityDept> list = AppDataBase.getDataBase(context).entityDao().findAllDept();emitter.onNext(list);emitter.onComplete();});}@Overridepublic Completable insertEmployee(EntityEmployee employee) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().insertEmployee(employee);emitter.onComplete();});}@Overridepublic Completable deleteEmployee(int employeeId) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().deleteEmployee(employeeId);emitter.onComplete();});}@Overridepublic Completable updateEmployeeName(int employeeId, String employeeName) {return Completable.create(emitter -> {AppDataBase.getDataBase(context).entityDao().updateEmployeeName(employeeId, employeeName);emitter.onComplete();});}@Overridepublic 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;}
}







相关文章:

ROOM数据快速入门

ROOM数据库快速入门 文章目录 ROOM数据库快速入门第一章 准备工作第01节 引入库第02节 布局文件第03节 activity类第04节 效果图 第二章 数据类第01节 实体类&#xff08;表&#xff09;第02节 数据访问类&#xff08;DAO&#xff09;第03节 数据Service层第04节 RoomDataBase …...

刷新,前面接口的返回值没有到,第二个接口已经请求完了,导致第二个接口返回数据错误

刷新&#xff0c;前面接口的返回值没有到&#xff0c;&#xff08;前端&#xff09;第二个接口已经请求完了&#xff08;入参没有拿前面那个接口返回的数据&#xff09;&#xff0c;导致第二个接口返回数据错误...

pdcj设计

为了实现这些功能需求&#xff0c;我们需要设计多个数据库表来存储相关的数据&#xff0c;并编写相应的Java代码来处理业务逻辑。下面是各个功能需求对应的MySQL表结构以及部分Java代码示例。 商品设置管理 商品分类管理 商品分类表 (product_categories)CREATE TABLE produ…...

【数据结构】哈希表的模拟实现

文章目录 1. 哈希的概念2. 哈希表与哈希函数2.1 哈希冲突2.2 哈希函数2.3 哈希冲突的解决2.3.1 闭散列&#xff08;线性探测&#xff09;2.3.2 闭散列的实现2.3.3 开散列(哈希桶)2.3.4 开散列的实现 2.4 开散列与闭散列比较 1. 哈希的概念 在我们之前所接触到的所有的数据结构…...

面试经典算法150题系列-数组/字符串操作之多数元素

序言&#xff1a;今天是第五题啦&#xff0c;前面四题的解法还清楚吗&#xff1f;可以到面试算法题系列150题专栏 进行复习呀。 温故而知新&#xff0c;可以为师矣&#xff01;加油&#xff0c;未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其…...

海南云亿商务咨询有限公司领航抖音电商服务

在当下这个瞬息万变的互联网时代&#xff0c;短视频平台尤其是抖音&#xff0c;正以惊人的速度重塑着消费者的购物习惯与商家的营销版图。在这场电商盛宴中&#xff0c;海南云亿商务咨询有限公司凭借其在抖音电商领域的深厚积累与前瞻视野&#xff0c;正逐步成为众多商家转型升…...

C#初级——继承

继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类&#xff0c;不需要完全重新编写新的数据成员和成员函数&#xff0c;只需要设计一个新的类&#xff0c;继承了已有的类的成员即可。这个已有的类被称为的基类&#xff08;父类&#xff0…...

Github 2024-07-29 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目3非开发语言项目3Python项目1TypeScript项目1C++项目1Lean项目1HTML项目1免费编程学习平台:freeCodeCamp.org 创建周期:3302 天…...

nginx反向代理和负载均衡+安装jdk-22.0.2

ps -aux|grep nginx //查看进程 nginx 代理 nginx代理是负载均衡的基础 主机&#xff1a;192.168.118.60 这台主机只发布了web服务&#xff0c;没有做代理的任何操作 修改一下index.html中的内容 echo "this is java web server" > /usr/local/nginx/htm…...

软考高级科目怎么选?软考高级含金量排序

软考既是国家职业资格考试&#xff0c;又是职称资格考试&#xff0c;含金量很高。软考的报考不设置任何条件&#xff0c;可以跨级考试&#xff0c;也就是非相关专业的人&#xff0c;也可以直接考高级。因此近些年报考软考、尤其是软考高级的人越来越多。 软考高级证书&#xf…...

【机器学习西瓜书学习笔记——模型评估与选择】

机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…...

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…...

Zookeeper客户端和服务端NIO网络通信源码剖析

文章目录 服务端的ServerCnxFactory到底是个什么东西?ServerCnxFactory 的作用ServerCnxFactory 的实现使用 ServerCnxFactory 的示例注意事项ServerCnxFactory是什么时候完成初始化的?初始化流程代码示例详细步骤1. 创建实例2. 配置3. 启动初始化时机总结服务端基于NIO的Ser…...

从DevOps到DevSecOps是怎样之中转变?

DevSecOps是DevOps实践的自然演进&#xff0c;其重点是将安全集成到软件开发和部署流程中。在DevOps和DevSecOps发展之前&#xff0c;企业通常在在软件部署前进行集中的安全测试&#xff0c;导致安全介入严重滞后&#xff0c;漏洞分风险无法及时修复&#xff0c;影响上线交付。…...

ORM与第三方数据库对接的探讨及不同版本数据库的影响

对象关系映射&#xff08;Object-Relational Mapping&#xff0c;ORM&#xff09;是一种将程序中的对象与数据库中的数据进行映射的技术&#xff0c;使开发者可以通过操作对象来间接操作数据库。然而&#xff0c;在实际应用中&#xff0c;ORM并不是总能完美地对接陌生的第三方数…...

Windows远程桌面无法拷贝文件问题

场景说明 Winwdows远程桌面&#xff0c;相比Linux方便一点就是&#xff0c;同是windows连接&#xff0c;其中复制粘贴功能&#xff0c;可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时&#xff0c;发现无法在服务器上复制内容到本地&#xff0c;也无法从…...

优化数据处理效率,解读 EasyMR 大数据组件升级

EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前&#xff0c;我们已就其展开了多方位、多角度的详尽介绍。而此次&#xff0c;我们成功接入了大数据组件的升级和回滚功能&#xff0c;能够借助 EasyMR …...

并发编程AtomicInteger详解

AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类&#xff0c;用于对 int 类型的变量进行原子操作。它利用底层的 CAS&#xff08;Compare-And-Swap&#xff09;机制&#xff0c;实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...

ctfshow 权限维持 web670--web679

web670 <?php// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...

职场生存指南

求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...