一、数据库注解
1.@Database
2.@Entity(@PrimaryKey)
3.@Dao(@Insert、@Update、@Delete、@Query)
二、数据库创建
1.添加依赖(app/build.gradle)
// room数据库依赖
implementation "androidx.room:room-runtime:2.2.0-alpha01"
annotationProcessor "androidx.room:room-compiler:2.2.0-alpha01"
2.创建实体类
使用@Entity注解实体类,至少有一个@PrimaryKey
@Entity
public class User {
@PrimaryKey(autoGenerate = true)//主键是否自动增长,默认为false
private int id;
private String name;
private int age;
//getter、setter方法
}
@Entity(tableName = "message_info")
public class MessageSaveBean {
@PrimaryKey(autoGenerate = true)
@NonNull
public int id = 0;// id自增长
@ColumnInfo(name = "date", typeAffinity = ColumnInfo.INTEGER)
public long date = 0;// 消息到达时间
@ColumnInfo(name = "read_state", typeAffinity = ColumnInfo.INTEGER)
public int readState = 0;// 消息已读状态, 0 - 未读, 1 - 已读
@ColumnInfo(name = "url_content", typeAffinity = ColumnInfo.TEXT)
public String urlContent = null;// 详情界面url
}
3.创建Dao(数据访问对象)
@Dao
public interface MessageSaveDao {
/**
* 查询数据库中所有数据.
* @return List
*/
@Query("select * from message_info")
List<MessageSaveBean> getAllMessageData();
/**
* 根据消息类型查询数据.
* @return List
*/
@Query("select * from message_info where msg_type_code = :msgType")
List<MessageSaveBean> getMessageDataByMsgType(String msgType);
/**
* 获取按时间降序排列的前五条数据.
* @return List
*/
@Query("select * from message_info order by date desc limit 1")
MessageSaveBean getDataByTime();
/**
* 查询某个消息ID的个数.
* @return int
*/
@Query("select COUNT() from message_info where message_id =:messageId")
int getCountById(String messageId);
/**
* 插入一条数据.
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertData(MessageSaveBean messageSaveBean);
/**
* 根据ID修改数据状态.
*/
@Query("update message_info set read_state = :state where message_id = :messageId")
void updateDataById(String messageId, int state);
/**
* 根据对象删除数据.
*/
@Query("delete from message_info where message_id =:messageId")
void deleteDataById(String messageId);
/**
* 根据列表删除数据.
*/
@Delete
void deleteDates(List<MessageSaveBean> messageSaveBeans);
/**
* 删除全部数据.
*/
@Query("delete from message_info")
void deleteAllData();
/**
* 查询数据库个数.
* @return int
*/
@Query("select COUNT(id) from message_info")
int getCount();
}
4.创建数据库
使用@Database注解并添加表名,数据库版本(每次改变数据库内容版本都会增加)
@Database(entities = {MessageSaveBean.class}, version = 2, exportSchema = false)
public abstract class MessageDatabase extends RoomDatabase {
private static MessageDatabase messageDatabaseInstance;
public static synchronized MessageDatabase getInstance(Context context) {
if (messageDatabaseInstance == null) {
messageDatabaseInstance = Room.databaseBuilder(context.getApplicationContext(),
MessageDatabase.class, DATA_BASE_NAME)
//数据库升级异常之后的回滚
.fallbackToDestructiveMigration()
//是否允许在主线程进行查询
.allowMainThreadQueries()
.build();
}
return messageDatabaseInstance;
}
public abstract MessageSaveDao messageSaveDao();//必要的
}
三、数据库使用
public static MessageDatabase mMessageDatabase;
mMessageDatabase = MessageDatabase.getInstance(this);
UserApp.mMessageDatabase.messageSaveDao().getAllMessageData();