先看运行效果图。
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 =