Android Room数据库如何使用增删改查

本文介绍了如何在Android应用中使用Room数据库进行增删改查操作。首先在build.gradle中添加相关依赖,然后通过注解创建数据表和UserDao接口。接着展示了如何创建数据库的基类MyDatabase,包括@Database注解的使用。运行后,可以看到自动生成的数据库实现类。最后,文章给出了MainActivity2、布局文件、适配器HomeAdapter及其布局的代码示例。
摘要由CSDN通过智能技术生成

先看运行效果图。
在这里插入图片描述
1.在app下的build.gradle。在dependencies{}闭包中添加如下依赖

//room
    def room_version = "2.3.0"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

完整的内容如下

plugins {
   
    id 'com.android.application'
}

android {
   
    namespace 'com.example.myapplication001'
    compileSdk 32

    defaultConfig {
   
        applicationId "com.xfjlfile.app"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        ndk {
   
            // 设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }

    buildTypes {
   
        release {
   
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
   
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {
   

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    
    //room。在这里写上你的依赖
    def room_version = "2.3.0"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

}

点击Sync进行同步一下。
2.注解使用

注解使用,Room使用很简单的,这里有三个基本的使用注解,
@Database@Entity@Dao。分别对于数据库、表、表的具体操作(增删改查)。

例如创建一个数据表User。创建User类。代码内容如下

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

//这是一个实体类对象。
//@Entity就是表示数据库中的表。用这个来注解,一定要写的
@Entity
public class User {
   

    //主键id,自增长
    @PrimaryKey(autoGenerate = true)
    @NonNull
    public int id;

    //用户名
    @ColumnInfo(name = "user_name", defaultValue = "")
    public String userName;

    //用户年龄
    @ColumnInfo(name = "user_age")
    public int userAge;

    //用户别称
    @ColumnInfo(name = "nick_name")
    public String nickName;

    //用户地址
    @ColumnInfo(name = "address")
    public String address;

    public User(String userName, int userAge, String nickName, String address) {
   
        this.id = id;
        this.userName = userName;
        this.userAge = userAge;
        this.nickName = nickName;
        this.address = address;
    }

    public int getId() {
   
        return this.id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getUserName() {
   
        return this.userName;
    }

    public void setUserName(String userName) {
   
        this.userName = userName;
    }

    public int getUserAge() {
   
        return this.userAge;
    }

    public void setUserAge(int userAge) {
   
        this.userAge = userAge;
    }

    public String getNickName() {
   
        return this.nickName;
    }

    public void setNickName(String nickName) {
   
        this.nickName = nickName;
    }

    public String getAddress() {
   
        return this.address;
    }

    public void setAddress(String address) {
   
        this.address = address;
    }

}
这个类很平常,主要是注解的说明,这个@Entity就是表示数据库中的表,
User类对应就是User表,@PrimaryKey表示主键,这里是id,
autoGenerate = true 是自增,@NonNull表示不为空。 
@ColumnInfo表示表中的列名,name = "user_name"表示列名的值。

Room是对象关系映射型数据库,所以你可以不用写这个@ColumnInfo注解,
写它主要是为了设置列名,不写则使用变量名做为列名。

假设我一个表中有30个字段,实际上用到的只有5个,
那么另外25个就不需要进行创建了,则使用@Ignore注解进行忽略。
例如这样。看如下内容

    @Ignore
    @ColumnInfo(name = "address")
    public String address;

创建UserDao类,代码如下

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

import java.util.List;

//@Dao就是表的具体操作(增删改查)。用这个来注解,一定要写的
@Dao
public interface UserDao {
   

    /**
     * 增加
     *
     * @param users 用户
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUser(User... users);


    /**
     * 查询所有用户
     * @return 用户列表
     */
    @Query("SELECT * FROM user")
    List<User> queryAll();

    /**
     * 按用户名查询
     * @param userName 用户名
     * @return 用户
     */
   // @Query("SELECT * FROM user WHERE user_name LIKE :userName LIMIT 1")//这里有两种写法。都可以
    @Query("SELECT * FROM user WHERE user_name= :userName")
    User findByName(String userName);

    /**
     * 按用户年龄查询
     * @param user_Age 用户年龄
     * @return 用户
     */
    // @Query("SELECT * FROM user WHERE user_name LIKE :userName LIMIT 1")//这里有两种写法。都可以
    @Query("SELECT * FROM user WHERE user_age= :user_Age")
    User findByAge(String user_Age);

    /**
     * 按条件查询
     * @param userName 用户名称
     * @param user_Age 用户年龄
     * @param address  用户地址
     * @return 用户
     */
    // @Query("SELECT * FROM user WHERE user_name LIKE :userName LIMIT 1")//这里有两种写法。都可以
    @Query("SELECT * FROM user WHERE user_name= :userName and user_age= :user_Age and address= :address")
    User findByAll(String userName,int user_Age,String address);

    /**
     * 修改
     * @param user 根据用户进行修改
     */
    @Update
    void update(User user);

    /**
     * 删除
     * @param user 根据用户进行删除
     */
    @Delete
    void delete(User user);

    //删除整张表的数据
    @Query("DELETE FROM user")
    void deleteAll();

}

UserDao是一个接口,主要是定义了一些方法,通过注解在编译的时候会生成实现类。
下面是数据库的创建,新建一个MyDatabase类,继承RoomDatabase,代码如下

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

//@Database对应数据库。用这个来注解,一定要写的
@Database(entities = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值