androidsuperman

room

// add for room
implementation "android.arch.persistence.room:runtime:1.1.1"
// room 配合 RxJava
implementation "android.arch.persistence.room:rxjava2:1.1.1"
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

// RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.3'

model对象:

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;

@Entity
public class User {
    // 用 @ColumnInfo 来标明数据库表的列名, 用 @PrimaryKey 来标示 主键
    @PrimaryKey(autoGenerate = true)
    private long    uid;
    private String  name;
    private String  address;
    private String  phone;
    private Integer age;

    public long getUid() {
        return uid;
    }

    public void setUid(long uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" + "uid=" + uid + ", name='" + name + '\'' + ", address='" + address + '\'' + ", phone='" + phone + '\'' + ", age=" +
               age + '}';
    }
}

相对应的DAO类:

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import java.util.List;

import io.reactivex.Flowable;

@Dao
public interface UserDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    List<Long> insert(User... users);

    @Query("SELECT * from user")
    Flowable<List<User>> loadUser();
    
    @Delete
    void delete(User user);
}

当准备好所有的 Model 和 DAO 后,我们就需要把它放入 DataBase 的管理中:

import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;

import com.tuacy.room.database.daos.BookDao;
import com.tuacy.room.database.daos.UserDao;
import com.tuacy.room.database.entities.Book;
import com.tuacy.room.database.entities.User;

@Database(entities = {User.class}, version = 3)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {

    public abstract UserDao userDao();
}

Converters.java为时间转换的类:

public class Converters {

    @TypeConverter
    public static Date fromTimestamp(Long value) {
        return value == null ? null : new Date(value);
    }

    @TypeConverter
    public static Long dateToTimestamp(Date date) {
        return date == null ? null : date.getTime();
    }
}

Room数据库数据库升级:

import android.app.Application;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.migration.Migration;

public class AppApplication extends Application {

    private AppDatabase mAppDatabase;

    @Override
    public void onCreate() {
        super.onCreate();
        mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db")
                           .allowMainThreadQueries()
                           .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
                           .build();
    }

    public AppDatabase getAppDatabase() {
        return mAppDatabase;
    }

    /**
     * 数据库版本 1->2 user表格新增了age列
     */
    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE User ADD COLUMN age integer");
        }
    };

    /**
     * 数据库版本 2->3 新增book表格
     */
    static final Migration MIGRATION_2_3 = new Migration(2, 3) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            database.execSQL(
                "CREATE TABLE IF NOT EXISTS `book` (`uid` INTEGER PRIMARY KEY autoincrement, `name` TEXT , `userId` INTEGER, 'time' INTEGER)");
        }
    };
}

操作数据库:

1,首先获取AppDatabase对象:

AppDatabase mAppDatabase = ((AppApplication)getApplication()).getAppDatabase();

2,新增操作:

                User user = new User();
                user.setPhone("18988195061");
                user.setAddress("珠海");
                user.setName("tuacy");
                //              user.setAge("28");
                List<Long> ids = mAppDatabase.userDao().insert(user);

3,查询操作:

                mAppDatabase.userDao()
                            .loadUser()
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(new Consumer<List<User>>() {
                                @Override
                                public void accept(List<User> entities) {
                                    if (entities != null) {
                                        for (User user : entities) {
                                            Log.d("tuacy", user.toString());
                                        }
                                    }

                                }
                            });

4,删除操作:

 findViewById(R.id.button_delete_user).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.setPhone("18320770932");
                user.setAddress("深圳");
                user.setName("soyoungboy");
                user.setUid(5);
                UserDao userDao = mAppDatabase.userDao();
                userDao.delete(user);
            }
        });

分类:

技术点:

相关文章:

  • 2021-06-09
  • 2021-05-18
  • 2022-01-02
  • 2021-05-08
  • 2021-05-09
  • 2019-10-06
  • 2021-12-15
  • 2021-10-11
猜你喜欢
  • 2021-10-04
  • 2021-12-01
  • 2018-07-06
  • 2021-07-18
  • 2021-11-30
  • 2021-09-04
  • 2021-06-23
相关资源
相似解决方案