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="text"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.pswp.cn/news/211557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

9.MySQL 索引

目錄 ???????概述 概念&#xff1a; 單列索引 普通索引 創建索引 查看索引 刪除索引 唯一索引 創建唯一索引 刪除唯一索引 主鍵索引 組合索引 創建索引 全文索引 概述 使用全文索引 空間索引 內部原理 相關算法&#xff1a; hash算法 二叉樹算法 …

Spring基于XML文件配置AOP

AOP AOP&#xff0c;面向切面編程&#xff0c;是對面向對象編程OOP的升華。OOP是縱向對一個事物的抽象&#xff0c;一個對象包括靜態的屬性信息&#xff0c;包括動態的方法信息等。而AOP是橫向的對不同事物的抽象&#xff0c;屬性與屬性、方法與方法、對象與對象都可以組成一個…

12.10多種編碼方式,編碼方案選擇策略(遞歸級聯),PDE,RLE代碼

作者如何選擇和設計編碼方案&#xff0c;以實現高效的解壓縮和高壓縮比&#xff1f;BtrBlocks是否適用于所有類型的數據&#xff1f; 選擇和設計編碼方案&#xff1a; 結合多種高效編碼方案&#xff1a;BtrBlocks 通過選擇一組針對不同數據分布的高效編碼方案&#xff0c;實現…

js判斷是否對象自身為空

文章目錄 一、前言二、JSON.stringify三、for in 配合 hasOwnProperty四、Object.keys五、Object.getOwnPropertyNames六、Object.getOwnPropertyNames 結合 Object.getOwnPropertySymbols七、Reflect.ownKeys八、最后 一、前言 如何判斷一個對象為空&#xff1f; 先上結論&a…

MySql復習筆記03(小滴課堂) 事務,視圖,觸發器,存儲過程

mysql 必備核心知識之事務的詳細解析&#xff1a; 創建一個數據庫表&#xff1a; 添加數據并開啟事務。 添加數據并查詢。 登錄另一臺服務器發現查不到這個表中的數據。 這是因為事務開啟了&#xff0c;但是沒有提交&#xff0c;只是把數據存到了內存中&#xff0c;還沒有寫入…

以為回調函數是同步的(js的問題)

回調函數可以用來處理 JavaScript 的異步操作&#xff0c;但是選用 Promise、async/await 更好&#xff0c;因為多重回調函數會導致回調地獄。 回調函數不是**同步的**&#xff0c;它是延時操作執行完畢后會被調用的一個函數。 比如全局方法 "setTimeout" &#xf…

CString 的 Replace 函數

Replace 使用測試 CString mSectNameNew L"槽a*b*c*d";CString mSectNameNew2 L"Ca*b*c*d";CString mSectNameNew3 L"[a*b*c*d";mSectNameNew.Replace(_T("M"), _T("C")); // 不會替換mSectNameNew.Re…

JOSEF 沖擊繼電器 ZC-23A DC48V 柜內安裝,板前帶座

系列型號 ZC-23沖擊繼電器&#xff1b;ZC-23A沖擊繼電器&#xff1b; ZC-23B沖擊繼電器 一、用途 沖擊繼電器ZC-23A DC48V 柜內安裝板前帶座 (以下簡稱繼電器)&#xff0c;廣泛用于直流操作的繼電器保護及自動控制回路中&#xff0c;作為集中控制信號元件。 二、主要技術參…

C#動態調用C++DLL中的函數

DLL中導出的函數 typedef void (*HQ_MSG_CALLBACK)(void *h, int nMsg, int nMsgType, int nReqNo, const char *szData, int nSize); void SetMsgFunc(void *h, HQ_MSG_CALLBACK pmsgCallBack);C#動態調用上述函數 public delegate void CALLBACK(IntPtr h, int nMsg, int n…

信息處理技術員

目錄 信息處理技術員工作內容 信息處理技術員崗位面試試題舉例 信息處理技術員考試 信息處理技術員工作內容 信息處理技術員是負責處理和管理信息系統的專業人員。他們的主要工作內容包括以下幾個方面&#xff1a; 1.系統維護和管理&#xff1a;信息處理技術員負責維護和管…

大數據股票簡單分析

目錄標題 內容說明解題量化金融的含義量化交易策略 點擊直接資料領取 內容 1解釋量化金融的含義&#xff0c;調研并給出至少 5種量化交易的策略或方法 2.完成Tushare Pro 的安裝、注冊&#xff0c;獲取自己的 Token&#xff0c;查閱網站內的接口講解和示例; 3通過Python 編程完…

力扣刷題總結 字符串(2)【KMP】

&#x1f525;博客主頁&#xff1a; A_SHOWY&#x1f3a5;系列專欄&#xff1a;力扣刷題總結錄 數據結構 云計算 數字圖像處理 28.找出字符串中第一個匹配項的下標mid經典KMP4593重復的子字符串mid可以使用滑動窗口或者KMP KMP章節難度較大&#xff0c;需要深入理解其中…

Flink 本地單機/Standalone集群/YARN模式集群搭建

準備工作 本文簡述Flink在Linux中安裝步驟&#xff0c;和示例程序的運行。需要安裝JDK1.8及以上版本。 下載地址&#xff1a;下載Flink的二進制包 點進去后&#xff0c;選擇如下鏈接&#xff1a; 解壓flink-1.10.1-bin-scala_2.12.tgz&#xff0c;我這里解壓到soft目錄 [ro…

OrangePi ZERO2 刷機與啟動

鏡像準備 用讀卡器和Win32Diskimager刷寫鏡像到內存卡&#xff0c;鏡像文件見下面百度云鏈接&#xff1a;https://pan.baidu.com/s/14aKTznc4Jvw4SoFF54JUTg 提取碼&#xff1a;1815 刷寫完畢后插回香橙派 串口登錄 用MobaXterm和USB-TTL進行串口登錄&#xff0c;MobaXterm軟…

談一談網絡協議中的應用層

文章目錄 一&#xff0c;什么是HTTPHTTP的優缺點HTTPS 一&#xff0c;什么是HTTP 我們在通過網絡進行傳輸數據時&#xff0c;我們要保證&#xff0c;我們在發送時構造的數據&#xff0c;在接收時也能夠解析出來&#xff0c;這本質上就是一種協議&#xff0c;是一種應用層協議&…

Spring Cloud + Vue前后端分離-第3章 SpringBoot項目技術整合

Spring Cloud Vue前后端分離-第3章 SpringBoot項目技術整合 3-1 集成持久層框架Mybatis ORM:對象關系映射&#xff0c;Hibernate是全自動ORM&#xff0c;Mybatis是半自動ORM&#xff0c;Mybatis可以操作的花樣更多&#xff0c;是首選的持久層框架 System模塊集成Mybatis框架…

整數分析 C語言xdoj43

問題描述 給出一個整數n&#xff08;0<n<100000000&#xff09;。求出該整數的位數&#xff0c;以及組成該整數的所有數字中的最大數字和最小數字。 輸入說明 輸入一個整數n&#xff08;0<n<100000000&#xff09; 輸出說明 在一行上依次輸出整數n的位…

Linux內核上游提交完整流程及示例

參考博客文章&#xff1a; 向linux內核提交代碼 - 知乎 一、下載Linux內核源碼 通過git下載Linux內核源碼&#xff0c;具體命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 實際命令及結果如下&#xff1a; penghaoDin…

IBM Qiskit量子機器學習速成(六)

量子卷積神經網絡 卷積和池化&#xff1a;卷積神經網絡的必備成分 卷積神經網絡被廣泛應用于圖像和音頻的識別當中&#xff0c;關鍵在于“卷積”操作賦予神經網絡統籌學習數據的能力。 執行卷積操作需要輸入數據與卷積核&#xff0c;卷積核首先與輸入數據左上角對齊&#xf…

【數據庫】簡單連接嵌套查詢

目錄 &#x1f387;簡單查詢 &#x1f387;連接查詢 &#x1f387;嵌套查詢 分析&思考 &#x1f387;簡單查詢 --練習簡單查詢 --select * from classes --select * from student --select * from scores --1.按Schedule表的結構要求用SQL語言創建Schedule表 --字段名…