jetpack之Room数据库的使用

Room是Google官方的数据库框架,在SQLite上提供了一个抽象层,以便在利用SQLite的全部功能的同时能更加流畅的访问数据库。

优点是:

1.减少了代码量

2.谷歌官方提供的,更加安全可靠

具体使用方法:

build.gradle

    implementation "androidx.room:room-runtime:latest.release"
    annotationProcessor "androidx.room:room-compiler:latest.release"

User.java

package com.jxd.studyone.room;

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

@Entity
public class User {
    @PrimaryKey(autoGenerate = true)
    public int uid;

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

    @ColumnInfo(name = "pwd")
    public String password;
}

UserDao.java

package com.jxd.studyone.room;

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

import java.util.List;

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE name LIKE :first AND name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);

}


AppDatabase.java

package com.jxd.studyone.room;

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

@Database(entities = {User.class}, version = 2)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}


调用方式:

package com.jxd.studyone.room;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

import android.os.Bundle;
import android.util.Log;

import com.jxd.studyone.R;

import java.util.List;
import java.util.concurrent.Executors;

public class RoomActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room);

        initData();
    }

    private void initData() {
        //对数据库进行迁移。
        Migration MIGRATION_1_2 = new Migration(1, 2) {
            @Override
            public void migrate(SupportSQLiteDatabase database) {
                database.execSQL("CREATE TABLE `user_t` (`uid` INTEGER  PRIMARY KEY autoincrement ,`name` TEXT,`pwd` TEXT)");
                database.execSQL("INSERT INTO `user_t` (`name` , `pwd`) SELECT `name`, `pwd` FROM `user`");
                database.execSQL("DROP TABLE `user`");
                database.execSQL("ALTER TABLE `user_t` RENAME TO `user`");
            }
        };

        //初始化数据库
        AppDatabase db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "database-name")
                .addMigrations(MIGRATION_1_2).build();

        Executors.newSingleThreadExecutor().submit(() -> {
            User u = new User();
            u.name = "jxdzs";
            u.password = "13662";
            db.userDao().insertAll(u);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            List<User> userList =  db.userDao().getAll();
            for (User user:userList){
                Log.d("room_tag",user.uid+" "+user.name+" "+user.password);
            }
        });

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

景兄弟1366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值