IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Room+ViewModel操作数据库 【android JetPack】 -> 正文阅读

[移动开发]Room+ViewModel操作数据库 【android JetPack】

架构图

Dao 层 操作 数据库

dataBase层操作 是一个抽象类或者是一个接口 提供 dao实例 和 dataBase 实例 需要基础 RoomDataBase 执行一下 数据库的一下操作

viewModel 层 提供dataBase

使用viewmodel层提供的database 去修改操作视图

实体类

package com.example.jetpack.Pojo;

/*
createName : 程序员keven
createTime : 2022/3/7
*/

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

@Entity(tableName = "user")
public class User {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(typeAffinity = ColumnInfo.INTEGER , name = "id")
    public int id ;
    @ColumnInfo(typeAffinity = ColumnInfo.TEXT , name = "name")
    public String name ;

    @ColumnInfo(typeAffinity = ColumnInfo.INTEGER , name = "age")
    public int age ;

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }


    @Ignore
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

Dao层

package com.example.jetpack.Dao;

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

import com.example.jetpack.Pojo.User;

import java.util.List;

/**
 * 操作数据库的 Dao层
 */

@Dao
public interface UserDao {

    @Insert
    void insert(User... user);


    @Delete
    public void  delete(User user);

    @Query("select * from user ")
    public List<User> queryAll();
}

dataBase层

package com.example.jetpack.DataBase;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

import com.example.jetpack.Dao.UserDao;
import com.example.jetpack.Pojo.User;

/*
createName : 程序员keven
createTime : 2022/3/7
*/
@Database(entities = {User.class}  ,version = 1 , exportSchema = false)
public abstract class DataBase  extends RoomDatabase {

    private static  DataBase database = null;



    public abstract UserDao getUserDao();

    static final Migration MIGRATION_2_3 = new Migration(2, 3) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {


        }
    };
    public static DataBase get(Context context) {
        if (database == null){
            database = Room.databaseBuilder(context, DataBase.class, "user")
                    .allowMainThreadQueries()
                    .build();
        }
        return database;
    }

}

viewModel层

package com.example.jetpack.ViewModel;

import android.content.Context;

import androidx.lifecycle.ViewModel;

import com.example.jetpack.DataBase.DataBase;

/*
createName : 程序员keven
createTime : 2022/3/7
*/
public class UserViewModel extends ViewModel {
    public DataBase dataBase = null ;


    public DataBase getDataBase(Context context) {
        if (dataBase == null){
            dataBase = DataBase.get(context);
        }
        return dataBase;
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">



    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/insert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加"
            />

        <Button
            android:id="@+id/delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="删除"
            />


    </RelativeLayout>

</LinearLayout>

Main

package com.example.jetpack;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.example.jetpack.Dao.UserDao;
import com.example.jetpack.DataBase.DataBase;
import com.example.jetpack.Pojo.User;
import com.example.jetpack.ViewModel.UserViewModel;

import java.util.List;

public class MainActivity extends AppCompatActivity  {

    private DataBase dataBase;
    private UserDao userDao;
    private TextView delete;
    private TextView insert;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        UserViewModel userViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(UserViewModel.class);
        dataBase = userViewModel.getDataBase(getBaseContext());
        userDao = dataBase.getUserDao();

        delete = findViewById(R.id.delete);
        insert = findViewById(R.id.insert);


        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User( "keven" , 20);

                Log.e("TAG," ,  "onClick: insert " );
                userDao.insert(user);

                List<User> users = userDao.queryAll();
                for (User u: users ) {
                    Log.e("TAG", "onClick: "+u.name +""+ u.age +""+u.id );
                }
            }
        });

    }

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:17  更:2022-03-10 22:44:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:10:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码