implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
package zhangphil.demo;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
/**
* Created by Phil on 2017/11/22.
*/
@Entity(tableName = "user_table")
public class User {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "userName")
public String name;
@ColumnInfo(name = "userAge")
public int age;
@ColumnInfo(name = "updateTime")
public long updateTime;
}
@PrimaryKey标注该字段是表中的主键,可根据该主键进行数据库的基本增删改查等等这些操作。当设置autoGenerate = true后,该主键将自增长。@ColumnInfo注解后面跟着的name,标明定义的Java变量将作为表中的一列。比如User中的
@ColumnInfo(name = "userName")
public String name;
那么数据库中表的一列userName中存储的数据就是name。
package zhangphil.demo;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import java.util.List;
/**
* Created by Phil on 2017/11/22.
*/
@Dao
public interface UserDao {
/**
* 查询
*
* @return
*/
@Query("SELECT * FROM user_table")
public List getAllUsers();
/**
* 添加
*
* @param users
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
public void insertUser(User... users);
/**
* 更新
*
* @param users
*/
@Update
public void updateUser(User... users);
/**
* 删除
*
* @param users
*/
@Delete
public void deleteUser(User... users);
}
/**
* 查询
*
* @return
*/
@Query("SELECT * FROM user_table")
public List getAllUsers();
该SQL语句将从我之前建立的数据块表“user_table”中,查询出所有的内容,然后返回一个集合。其他关于数据库的操作如增加(@Insert),删除(@Delete),修改(更新,@Update),均以注解标明。这些基本操作可以按照User中定义的@PrimaryKey主键操作。
package zhangphil.demo;
import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
/**
* Created by Phil on 2017/11/22.
*/
@Database(entities = {User.class}, version = 1)
public abstract class UserDatabase extends RoomDatabase {
public abstract UserDao getUserDao();
}
UserDatabase最重要的功能是提供给开发者各种Dao。开发者获得Dao后,就可以像操作基本Java对象实例一样操作Android Room数据中数据。
(五)在MainActivity.java中测试我写的Android Room。注意涉及到数据库操作,要放到后台线程中运行。MainActivity.java:
package zhangphil.demo;
import android.arch.persistence.room.Room;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private String TAG = "输出";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new Runnable() {
@Override
public void run() {
databaseOperation();
}
}).start();
}
private void databaseOperation() {
UserDatabase mUserDatabase = Room.databaseBuilder(getApplicationContext(), UserDatabase.class, "users").build();
UserDao mUserDao = mUserDatabase.getUserDao();
//写数据库
Log.d(TAG, "开始写入数据...");
writeDatabase(mUserDao, "张三", 18);
writeDatabase(mUserDao, "李四", 19);
Log.d(TAG, "写入数据库完毕.");
//读数据库
Log.d(TAG, "第1次读数据库");
readDatabase(mUserDao);
//更新数据库
updateUser(mUserDao);
//读数据库
Log.d(TAG, "第2次读数据库");
readDatabase(mUserDao);
//删除数据,根据主键id
deleteUser(mUserDao, 1);
//读数据库
Log.d(TAG, "第3次读数据库");
readDatabase(mUserDao);
Log.d(TAG, "========================");
Log.d(TAG, "本轮数据库操作事务全部结束");
Log.d(TAG, "========================");
}
private void readDatabase(UserDao dao) {
Log.d(TAG, "读数据库...");
List users = dao.getAllUsers();
for (User u : users) {
Log.d(TAG, u.id + "," + u.name + "," + u.age + "," + u.updateTime);
}
Log.d(TAG, "读数据库完毕.");
}
private void writeDatabase(UserDao dao, String name, int age) {
User user = new User();
user.name = name;
user.age = age;
user.updateTime = System.currentTimeMillis();
dao.insertUser(user);
}
private void updateUser(UserDao dao) {
Log.d(TAG, "更新数据库...");
User u = new User();
u.id = 2;
u.name = "赵五";
u.age = 20;
u.updateTime = System.currentTimeMillis();
dao.updateUser(u);
Log.d(TAG, "更新数据库完毕.");
}
private void deleteUser(UserDao dao, int id) {
Log.d(TAG, "删除数据库...");
User u = new User();
u.id = id;
dao.deleteUser(u);
Log.d(TAG, "删除数据库完毕.");
}
}
11-23 10:49:22.631 19616-19641/zhangphil.demo D/输出: 开始写入数据...
11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 写入数据库完毕.
11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 第1次读数据库
11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 读数据库...
11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 1,张三,18,1511405362631
11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 2,李四,19,1511405362674
11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 读数据库完毕.
11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 更新数据库...
11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 更新数据库完毕.
11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 第2次读数据库
11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 读数据库...
11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 1,张三,18,1511405362631
11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 2,赵五,20,1511405362689
11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 读数据库完毕.
11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 删除数据库...
11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 删除数据库完毕.
11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 第3次读数据库
11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 读数据库...
11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 2,赵五,20,1511405362689
11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 读数据库完毕.
11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: ========================
11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 本轮数据库操作事务全部结束
11-23 10:49:22.699 19616-19641/zhangphil.demo D/输出: ========================