Android : Room 数据库的基本用法 —简单应用_一_入门

1.Room介绍:

Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个简单的 API 层,使得使用 SQLite 数据库变得更加容易和方便。

以下是 Android Room 的主要特点:

  1. 对象关系映射 (ORM):Room 允许您将 Java 或 Kotlin 对象映射到数据库表中。您可以定义数据模型并使用注解来定义关系和约束。
  2. 事务管理:Room 提供了事务管理的功能,可以确保数据的完整性和一致性。它还支持自动提交和回滚机制,类似于 JDBC 中的事务管理。
  3. 数据库抽象:Room 提供了一个抽象层,使得您可以使用简单的 API 来执行 SQL 查询和操作数据库。您不需要编写手动的 SQL 语句,而是使用 Java 或 Kotlin 的查询 API。
  4. 同步和异步操作:Room 支持同步和异步操作,使得您可以轻松地在后台线程中执行数据库操作,以避免阻塞主线程。
  5. 数据库迁移:当您的应用程序更新时,可能需要更改数据库模式。Room 可以自动处理迁移过程,确保数据的一致性和完整性。
  6. 并发支持:Room 支持多线程并发操作,可以有效地处理多个并发请求。
  7. 嵌入式数据库:Room 支持嵌入式数据库,这意味着您可以将数据库文件嵌入到您的应用程序中,而不需要单独安装和管理 SQLite 数据库。
  8. 支持跨平台:除了 Android 平台,Room 还支持 iOS 和桌面应用程序。

总之,Android Room 是一个功能强大的持久性库,使得管理 SQLite 数据库变得更加简单和方便。它提供了一个对象关系映射层、事务管理、数据库抽象等功能,可以帮助您更轻松地构建和管理 Android 应用程序中的数据库。

2.Room使用:

使用教程: Room  |  Jetpack  |  Android Developers

开发文档:androidx.room  |  Android Developers

1.导入依赖:在build.gradle文件中加入

dependencies {//Roomdef room_version = "2.5.0"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"
}

2.创建实体类 People.java

package com.example.myroom.entity;import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;//实体类 表名 不写默认内名首字母小写 people
@Entity(tableName = "people")
public class People {//主键 自动生成@PrimaryKey(autoGenerate = true)private int id;//列的名称@ColumnInfo(name = "user_name")private String name;//不写默认列的名称为age,sexprivate int age;private String sex;public People(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}public void setId(int id) {this.id = id;}public int getId() {return 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 String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

3.创建一个接口Dao  PeopleDao.java

package com.example.myroom.dao;import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;import com.example.myroom.entity.People;import java.util.List;//dao database access object 接口 处理数据库的方法签名
@Dao
public interface PeopleDao {//添加  传递一个参数 对象@Insertvoid insertDataOne(People people);//添加  可以传递多个参数 对象@Insertvoid insertDataS(People... people);//删除@Deleteint deleteDataS(People... people);//修改 传入对象 设置 id 进行修改某一个@Updateint updateData(People... people);//查询 根据id倒序@Query("select * from people order by id desc")List<People> getPeoples();//根据id查询@Query("select * from people where id =:numb")People getPeople(Integer numb);//删除表数据@Query("delete from people")void deleteTableData();}

4.写个抽象类继承RoodDatabase

package com.example.myroom.dao;import androidx.room.Database;
import androidx.room.RoomDatabase;import com.example.myroom.entity.People;//抽象类 继承 RoomDatabase      我们不用实现people中的方法
// version = 1 数据库版本,exportSchema = false不允许导出数据库的架构
@Database(entities = {People.class}, version = 1, exportSchema = false)
public abstract class PeopleDataBase extends RoomDatabase {/*** Java 抽象类的一些特点* 不能被实例化:抽象类不能被实例化,因为它没有具体的实现细节。它只能被继承,并且子类必须实现抽象类中的所有抽象方法。* 包含抽象方法:抽象类可以包含抽象方法,这些方法只有声明但没有实现。子类必须实现这些抽象方法,否则它也必须被声明为抽象类。* 提供通用功能和行为:抽象类提供了一些通用功能和行为,这些功能和行为可以被其子类继承和重用。子类可以根据需要扩展这些功能和行为,或者重写它们以提供不同的实现。* 用于设计高层次的抽象:抽象类可以用于表示一个高层次的抽象概念或者一个通用模板,使得代码更加模块化和可维护。通过将一些公共方法和行为提取到一个抽象类中,可以避免在多个子类中重复实现相同的功能。* 扩展性:抽象类可以定义一些扩展的接口,子类可以选择实现这些接口来提供额外的功能。这使得抽象类具有很好的扩展性,可以根据需要添加新的功能和行为*//*public abstract PeopleDao peopleDao();}

4.MainActivity.java

package com.example.myroom;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;import com.example.myroom.dao.PeopleDao;
import com.example.myroom.dao.PeopleDataBase;
import com.example.myroom.entity.People;import java.util.List;public class MainActivity extends AppCompatActivity {PeopleDataBase DB;private Button btnInsert, btnDelete, btnUpdate, btnSelect, btnDeleteData;private TextView textContent;private EditText etName, etAge, etSex, etSelect, etDelete, etUpdate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);DB = Room.databaseBuilder(this, PeopleDataBase.class, "peopleDB")// 默认不允许在主线程中连接数据库   强制在主线程中处理.allowMainThreadQueries().build();textContent = findViewById(R.id.tvcontent);etName = findViewById(R.id.etName);etAge = findViewById(R.id.etAge);etSex = findViewById(R.id.etSex);etSelect = findViewById(R.id.etSelect);etDelete = findViewById(R.id.etDelete);etUpdate = findViewById(R.id.etUpdate);btnInsert = findViewById(R.id.btnSave);btnDelete = findViewById(R.id.btnDelete);btnUpdate = findViewById(R.id.btnUpdate);btnSelect = findViewById(R.id.btnselect);btnDeleteData = findViewById(R.id.btnDeleteTB);//查询数据selectData(null);//按钮事件 插入数据btnInsert.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//插入数据 防止空String name = etName.getText().toString().equals("") ? "张三" : etName.getText().toString();int age = etAge.getText().toString().equals("") ? 20 : Integer.parseInt(etAge.getText().toString());String sex = etSex.getText().toString().equals("") ? "男" : etSex.getText().toString();People people = new People(name, age, sex);DB.peopleDao().insertDataS(people);//查询数据selectData(null);}});//修改数据btnUpdate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//修改int id = etUpdate.getText().toString().equals("") ? 0 : Integer.parseInt(etUpdate.getText().toString());if (id != 0) {String name = etName.getText().toString();int age = Integer.parseInt(etAge.getText().toString());String sex = etSex.getText().toString();People people = new People(name, age, sex);people.setId(id);DB.peopleDao().updateData(people);//查询selectData(null);}}});//删除btnDelete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int id = etDelete.getText().toString().equals("") ? 0 : Integer.parseInt(etDelete.getText().toString());if (id != 0) {People people = new People();people.setId(id);DB.peopleDao().deleteDataS(people);//查询selectData(null);}}});//根据id 查数据btnSelect.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int id = etSelect.getText().toString().equals("") ? 0 : Integer.parseInt(etSelect.getText().toString());if (id != 0) {selectData(id);}}});//删除全部数据btnDeleteData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {DB.peopleDao().deleteTableData();}});}/*** 查询数据的方法*/public void selectData(Integer id) {try {StringBuilder text = new StringBuilder();if (id == null || id == 0) {List<People> peopleList = DB.peopleDao().getPeoples();if (peopleList.size() != 0) {for (int i = 0; i < peopleList.size(); i++) {People people = peopleList.get(i);text.append("id:").append(people.getId()).append("---name:").append(people.getName()).append("---age:").append(people.getAge()).append("---sex:").append(people.getSex()).append("\n");}} else {text.append("没有可用的数据");}} else {People people = DB.peopleDao().getPeople(id);text.append("id:").append(people.getId()).append("---name:").append(people.getName()).append("---age:").append(people.getAge()).append("---sex:").append(people.getSex());}textContent.setText(text.toString());} catch (Exception e) {Log.e("TAG", "----查询失败------------" + e.getMessage());}}}

5.布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btnUpdate"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="修改"app:layout_constraintBottom_toBottomOf="@+id/etUpdate"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/etUpdate"app:layout_constraintTop_toTopOf="@+id/etUpdate"app:layout_constraintVertical_bias="0.0" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.05" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="0dp"android:text="Room简单应用:"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/guideline2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btnSave"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="4dp"android:text="保存"app:layout_constraintBottom_toTopOf="@+id/guideline9"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.203"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/guideline4" /><Buttonandroid:id="@+id/btnDelete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除"app:layout_constraintBottom_toBottomOf="@+id/etDelete"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/etDelete"app:layout_constraintTop_toTopOf="@+id/etDelete" /><Buttonandroid:id="@+id/btnselect"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查询"app:layout_constraintBottom_toBottomOf="@+id/etSelect"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/etSelect"app:layout_constraintTop_toTopOf="@+id/etSelect" /><Buttonandroid:id="@+id/btnDeleteTB"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="4dp"android:text="删除表数据"app:layout_constraintBottom_toTopOf="@+id/guideline9"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.873"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/guideline4" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.13" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.29548565" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toStartOf="@+id/etName"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5" /><EditTextandroid:id="@+id/etName"android:layout_width="200dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入"android:inputType="text"app:layout_constraintBottom_toBottomOf="@+id/textView2"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toTopOf="@+id/textView2" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.05352798" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.21" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.6" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline9"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.37" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="性别:"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/guideline6"app:layout_constraintEnd_toStartOf="@+id/etSex"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5" /><EditTextandroid:id="@+id/etSex"android:layout_width="200dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入"android:inputType="text"app:layout_constraintBottom_toBottomOf="@+id/textView3"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/textView3"app:layout_constraintTop_toTopOf="@+id/textView3" /><EditTextandroid:id="@+id/etAge"android:layout_width="200dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入"android:inputType="number"app:layout_constraintBottom_toBottomOf="@+id/textView4"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/textView4"app:layout_constraintTop_toTopOf="@+id/textView4" /><TextViewandroid:id="@+id/textView4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="年龄:"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toStartOf="@+id/etAge"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline10"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.9" /><EditTextandroid:id="@+id/etSelect"android:layout_width="100dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入id"android:inputType="number"app:layout_constraintBottom_toTopOf="@+id/guideline8"app:layout_constraintEnd_toStartOf="@+id/btnselect"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/guideline9"app:layout_constraintVertical_bias="0.0" /><EditTextandroid:id="@+id/etDelete"android:layout_width="100dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入id"android:inputType="number"app:layout_constraintBottom_toTopOf="@+id/guideline8"app:layout_constraintEnd_toStartOf="@+id/btnDelete"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/guideline9"app:layout_constraintVertical_bias="0.451" /><EditTextandroid:id="@+id/etUpdate"android:layout_width="100dp"android:layout_height="wrap_content"android:ems="10"android:hint="请输入id"android:inputType="number"app:layout_constraintBottom_toTopOf="@+id/guideline8"app:layout_constraintEnd_toStartOf="@+id/btnUpdate"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/etSelect"app:layout_constraintVertical_bias="1.0" /><TextViewandroid:id="@+id/tvcontent"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline10"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="@+id/guideline8"tools:hint="这里显示数据" /></androidx.constraintlayout.widget.ConstraintLayout>

示例图:

数据库:

把这三个文件导出查看数据库:

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

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

相关文章

无代码,零基础!手把手教你掌握Stable Diffusion,创作出惊艳AI插画!

【前言】 Stable Diffusion是一款开源、免费的应用程序&#xff0c;因为其生态开放且发展迅速&#xff0c;所以不同时期的安装、配置方式可能都会有所变化。如果遇到什么安装上的问题可以评论提出&#xff0c;帮你解答。 关于Stable Diffusion Stable Diffusion&#xff08;简…

IDEA中工具条中的debug按钮不能用了显示灰色

IDEA中工具条中的debug按钮不能用了显示灰色 1. 问题描述 IDEA上的DEBUG按钮突然变成了灰色&#xff1a; 2. 解决办法 一通搜索&#xff0c;终于找到解决办法 点击 File -> Project Structure如下图操作 3. 重启&#xff0c;解决 4. 参考 https://www.cnblogs.com…

自学编程推荐一个容易学的中文编程工具,构件箱之单选框组简介

一、前言&#xff1a; 零基础自学编程&#xff0c;中文编程工具下载&#xff0c;中文编程工具构件之扩展系统菜单构件教程 编程系统化教程链接https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家分享一款中文编程工具&#xff0c;零基础轻…

C语言之基本数据类型和数

目录 算数类型和基本数据类型 基数 基数转换 由八进制数、十六进制数、二进制数向十进制数转换 由十进制数向八进制数、十六进制数、二进制数转换 二进制和十六进制的基数转换 在学习基本数据类型之前我们先来学习数。 算数类型和基本数据类型 在前面的学习中我们可以使用…

Docker 设置国内镜像源

Docker 设置国内镜像源 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 具体配置如下&#xff1a; {"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirro…

Flutter Dart FFI Pointer<Uint8>类型如何转成数组或String

前言 继上一次发布的 Flutter 直接调用so动态库&#xff0c;或调用C/C源文件内函数 内容&#xff0c;最终我选择了第二种方式&#xff0c;直接把整个 Native C 的项目源代码放进了 Flutter 工程里编译&#xff08;放在iOS的目录是因为它不支持自定义源码路径&#xff0c;Andro…

阶段十-java新特性

JDK9新特性 1.模块化系统 jar包结构的变化 jar -》model -》package -》class 通过不同的模块进行开发 每个模块都有自己的模块配置文件module-info.java 2.JShell JDK9自带的命令行开发&#xff0c;在进行简单的代码调试时可以直接编译使用 可以定义变量&#xff0c;方法&…

大数据与人工智能——神经网络是如何工作的?

大数据与人工智能——神经网络是如何工作的&#xff1f; 我们习惯于去了解所使用工具、中间件的底层原理&#xff0c;本文则旨在帮助大家了解AI模型的底层机制&#xff0c;让大家在学习或应用各种大模型时更加得心应手&#xff0c;更加适合没有AI基础的小伙伴们。 一、GPT与神…

Java实现机考程序界面

机考界面如下&#xff08;单选题&#xff09;&#xff0c;上方是题目状态&#xff0c;下方是题目&#xff0c;1/5/1是已做题目数量、总共题目数量和答对题目数量。 再看一下多选题的界面。 判断题的界面。 回答正确时的反馈&#xff0c;会给出用时。 回答错误时的反馈&#xff…

社会不教,精英不讲,坎儿还得自己过(揭秘人才成长规律)

推荐大家去看看天涯社区的精华帖子&#xff1a;《社会不教&#xff0c;精英不讲&#xff0c;坎儿还得自己过&#xff08;揭秘人才成长规律&#xff09;》 原出处天涯精华帖&#xff1a;《社会不教&#xff0c;精英不讲&#xff0c;坎儿还得自己过&#xff08;揭秘人才成长规律&…

【教3妹学编程-算法题】消除相邻近似相等字符

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2…

解决mfc140.dll丢失的方法有哪些?分享3个实测有效的方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“找不到指定的模块”或“无法加载某某.dll文件”。这些错误通常会导致程序无法正常运行&#xff0c;给用户带来很大的困扰。而mfc140.dll文件丢失就是其中之一。本文将介绍3个解决mfc14…

深入理解Java虚拟机---类加载机制

类加载机制 什么是类加载机制类加载的时机类加载的过程加载验证文件格式验证元数据验证字节码验证符号引用验证 准备解析初始化 类加载器双亲委派模型 什么是类加载机制 虚拟机把描述类的数据从 Class 文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff…

《PySpark大数据分析实战》-06.安装环境准备

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

Kafka集成springboot

安装kafka&#xff0c;直接到官网下载bin文件&#xff0c;本文使用windows进行使用kafka。 下载之后&#xff0c;第一步&#xff0c;启动zookeeper&#xff1a; zookeeper-server-start.bat ..\..\config\zookeeper.properties 第二步&#xff0c;启动kafka&#xff1a; kafka…

Matlab之让特别大的数字显示全,不用科学计数法的形式

一、常见大数显示形式 matlab会自动将特别大的数字&#xff0c;采用科学计数法显示。 bigNum 1234567890000000000000 二、显示大数所有位数 这里采用的是将数字转为字符&#xff0c;并用定点表示 bigNum 1234567890000000000000; bigNumstr num2str(bigNum, %.0f); % 使用…

如果我忽然嗝屁了,家人怎么继承我的财产

前言 笔者很喜欢的电影《寻梦环游记》有这么一句经典台词&#xff1a;“真正的死亡是世界上没有一个人记得你”。 然而&#xff0c;现实中我们所说的“死亡”&#xff0c;其实就是 他再不能与这个世界、与自己在乎的人有新的互动了。 本文&#xff0c;笔者想写一写 关于死亡的…

Java的String类常用方法 |StringBuilder和StringBuffer

文章目录 String类常用方法字符串查找转化字符串替换字符串拆分字符串截取其他操作方法 字符串的不可变性StringBuilder和StringBufferStringBuilder的介绍面试题 String类常用方法 字符串查找 方法功能char charAt(int index)返回index位置上字符&#xff0c;如果index为负数…

Python polars库:高性能数据操作的利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据处理和分析领域&#xff0c;Python一直以来都是一种热门的编程语言。近年来&#xff0c;随着数据量的增加和对性能的需求&#xff0c;一些新的数据处理库也逐渐崭露头角。其中&#xff0c;polars库作为一个…

C++ 11 初识2

一.新的类功能 默认成员函数 原来 C 类中&#xff0c;有 6 个默认成员函数&#xff1a; 构造函数 析构函数拷贝构造函数拷贝赋值重载 取地址重载const 取地址重载 C11 新增了两个&#xff1a;移动构造函数和移动赋值运算符重载。 针对移动构造函数和移动赋值运算符重载有一些需…