国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android : Room 數(shù)據(jù)庫的基本用法 —簡單應(yīng)用_一_入門

這篇具有很好參考價(jià)值的文章主要介紹了Android : Room 數(shù)據(jù)庫的基本用法 —簡單應(yīng)用_一_入門。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.Room介紹:

Android Room 是 Android 官方提供的一個(gè)持久性庫,用于在 Android 應(yīng)用程序中管理數(shù)據(jù)庫。它提供了一個(gè)簡單的 API 層,使得使用 SQLite 數(shù)據(jù)庫變得更加容易和方便。

以下是 Android Room 的主要特點(diǎn):

  1. 對(duì)象關(guān)系映射 (ORM):Room 允許您將 Java 或 Kotlin 對(duì)象映射到數(shù)據(jù)庫表中。您可以定義數(shù)據(jù)模型并使用注解來定義關(guān)系和約束。
  2. 事務(wù)管理:Room 提供了事務(wù)管理的功能,可以確保數(shù)據(jù)的完整性和一致性。它還支持自動(dòng)提交和回滾機(jī)制,類似于 JDBC 中的事務(wù)管理。
  3. 數(shù)據(jù)庫抽象:Room 提供了一個(gè)抽象層,使得您可以使用簡單的 API 來執(zhí)行 SQL 查詢和操作數(shù)據(jù)庫。您不需要編寫手動(dòng)的 SQL 語句,而是使用 Java 或 Kotlin 的查詢 API。
  4. 同步和異步操作:Room 支持同步和異步操作,使得您可以輕松地在后臺(tái)線程中執(zhí)行數(shù)據(jù)庫操作,以避免阻塞主線程。
  5. 數(shù)據(jù)庫遷移:當(dāng)您的應(yīng)用程序更新時(shí),可能需要更改數(shù)據(jù)庫模式。Room 可以自動(dòng)處理遷移過程,確保數(shù)據(jù)的一致性和完整性。
  6. 并發(fā)支持:Room 支持多線程并發(fā)操作,可以有效地處理多個(gè)并發(fā)請(qǐng)求。
  7. 嵌入式數(shù)據(jù)庫:Room 支持嵌入式數(shù)據(jù)庫,這意味著您可以將數(shù)據(jù)庫文件嵌入到您的應(yīng)用程序中,而不需要單獨(dú)安裝和管理 SQLite 數(shù)據(jù)庫。
  8. 支持跨平臺(tái):除了 Android 平臺(tái),Room 還支持 iOS 和桌面應(yīng)用程序。

總之,Android Room 是一個(gè)功能強(qiáng)大的持久性庫,使得管理 SQLite 數(shù)據(jù)庫變得更加簡單和方便。它提供了一個(gè)對(duì)象關(guān)系映射層、事務(wù)管理、數(shù)據(jù)庫抽象等功能,可以幫助您更輕松地構(gòu)建和管理 Android 應(yīng)用程序中的數(shù)據(jù)庫。

2.Room使用:

使用教程:?Room ?|? Jetpack ?|? Android Developers

開發(fā)文檔:androidx.room ?|? Android Developers

1.導(dǎo)入依賴:在build.gradle文件中加入

dependencies {

        //Room
        def room_version = "2.5.0"
        implementation "androidx.room:room-runtime:$room_version"
        annotationProcessor "androidx.room:room-compiler:$room_version"
}

2.創(chuàng)建實(shí)體類 People.java

package com.example.myroom.entity;

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

//實(shí)體類 表名 不寫默認(rèn)內(nèi)名首字母小寫 people
@Entity(tableName = "people")
public class People {
    //主鍵 自動(dòng)生成
    @PrimaryKey(autoGenerate = true)
    private int id;

    //列的名稱
    @ColumnInfo(name = "user_name")
    private String name;

    //不寫默認(rèn)列的名稱為age,sex
    private 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.創(chuàng)建一個(gè)接口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 接口 處理數(shù)據(jù)庫的方法簽名
@Dao
public interface PeopleDao {

    //添加  傳遞一個(gè)參數(shù) 對(duì)象
    @Insert
    void insertDataOne(People people);

    //添加  可以傳遞多個(gè)參數(shù) 對(duì)象
    @Insert
    void insertDataS(People... people);

    //刪除
    @Delete
    int deleteDataS(People... people);

    //修改 傳入對(duì)象 設(shè)置 id 進(jìn)行修改某一個(gè)
    @Update
    int updateData(People... people);

    //查詢 根據(jù)id倒序
    @Query("select * from people order by id desc")
    List<People> getPeoples();

    //根據(jù)id查詢
    @Query("select * from people where id =:numb")
    People getPeople(Integer numb);

    //刪除表數(shù)據(jù)
    @Query("delete from people")
    void deleteTableData();

}

4.寫個(gè)抽象類繼承RoodDatabase

package com.example.myroom.dao;

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

import com.example.myroom.entity.People;

//抽象類 繼承 RoomDatabase      我們不用實(shí)現(xiàn)people中的方法
// version = 1 數(shù)據(jù)庫版本,exportSchema = false不允許導(dǎo)出數(shù)據(jù)庫的架構(gòu)
@Database(entities = {People.class}, version = 1, exportSchema = false)
public abstract class PeopleDataBase extends RoomDatabase {
    /**
     * Java 抽象類的一些特點(diǎn)
     * 不能被實(shí)例化:抽象類不能被實(shí)例化,因?yàn)樗鼪]有具體的實(shí)現(xiàn)細(xì)節(jié)。它只能被繼承,并且子類必須實(shí)現(xiàn)抽象類中的所有抽象方法。
     * 包含抽象方法:抽象類可以包含抽象方法,這些方法只有聲明但沒有實(shí)現(xiàn)。子類必須實(shí)現(xiàn)這些抽象方法,否則它也必須被聲明為抽象類。
     * 提供通用功能和行為:抽象類提供了一些通用功能和行為,這些功能和行為可以被其子類繼承和重用。子類可以根據(jù)需要擴(kuò)展這些功能和行為,或者重寫它們以提供不同的實(shí)現(xiàn)。
     * 用于設(shè)計(jì)高層次的抽象:抽象類可以用于表示一個(gè)高層次的抽象概念或者一個(gè)通用模板,使得代碼更加模塊化和可維護(hù)。通過將一些公共方法和行為提取到一個(gè)抽象類中,可以避免在多個(gè)子類中重復(fù)實(shí)現(xiàn)相同的功能。
     * 擴(kuò)展性:抽象類可以定義一些擴(kuò)展的接口,子類可以選擇實(shí)現(xiàn)這些接口來提供額外的功能。這使得抽象類具有很好的擴(kuò)展性,可以根據(jù)需要添加新的功能和行為
     */

/*

    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;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        DB = Room.databaseBuilder(this, PeopleDataBase.class, "peopleDB")
                // 默認(rèn)不允許在主線程中連接數(shù)據(jù)庫   強(qiáng)制在主線程中處理
                .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);

        //查詢數(shù)據(jù)
        selectData(null);

        //按鈕事件 插入數(shù)據(jù)
        btnInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //插入數(shù)據(jù) 防止空
                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);
                //查詢數(shù)據(jù)
                selectData(null);

            }
        });

        //修改數(shù)據(jù)
        btnUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public 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() {
            @Override
            public 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);
                }

            }
        });

        //根據(jù)id 查數(shù)據(jù)
        btnSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int id = etSelect.getText().toString().equals("") ? 0 : Integer.parseInt(etSelect.getText().toString());
                if (id != 0) {
                    selectData(id);
                }

            }
        });

        //刪除全部數(shù)據(jù)
        btnDeleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DB.peopleDao().deleteTableData();
            }
        });

    }

    /**
     * 查詢數(shù)據(jù)的方法
     */
    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("沒有可用的數(shù)據(jù)");
                }

            } 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">

    <Button
        android: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.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.05" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:text="Room簡單應(yīng)用:"
        android:textSize="24sp"
        app:layout_constraintBottom_toTopOf="@+id/guideline2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android: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" />

    <Button
        android: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" />

    <Button
        android: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" />

    <Button
        android:id="@+id/btnDeleteTB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="刪除表數(shù)據(jù)"
        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.Guideline
        android: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.Guideline
        android:id="@+id/guideline4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.29548565" />

    <TextView
        android: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" />

    <EditText
        android:id="@+id/etName"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入"
        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.Guideline
        android: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.Guideline
        android: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.Guideline
        android: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.Guideline
        android:id="@+id/guideline9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.37" />

    <TextView
        android: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" />

    <EditText
        android:id="@+id/etSex"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入"
        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" />

    <EditText
        android:id="@+id/etAge"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入"
        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" />

    <TextView
        android: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.Guideline
        android:id="@+id/guideline10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.9" />

    <EditText
        android:id="@+id/etSelect"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入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" />

    <EditText
        android:id="@+id/etDelete"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入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" />

    <EditText
        android:id="@+id/etUpdate"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請(qǐng)輸入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" />

    <TextView
        android: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="這里顯示數(shù)據(jù)" />

</androidx.constraintlayout.widget.ConstraintLayout>

示例圖:

android room,Android 相關(guān),數(shù)據(jù)庫相關(guān),android,數(shù)據(jù)庫,筆記

數(shù)據(jù)庫:

android room,Android 相關(guān),數(shù)據(jù)庫相關(guān),android,數(shù)據(jù)庫,筆記

把這三個(gè)文件導(dǎo)出查看數(shù)據(jù)庫:

android room,Android 相關(guān),數(shù)據(jù)庫相關(guān),android,數(shù)據(jù)庫,筆記文章來源地址http://www.zghlxwxcb.cn/news/detail-845301.html

到了這里,關(guān)于Android : Room 數(shù)據(jù)庫的基本用法 —簡單應(yīng)用_一_入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包