1.添加依赖:
//room实现sqlite数据库
def room_version = "2.2.0-alpha01"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
2.创建room实现三步走:
2.1:创建entity实体类:记得加上注解@Entity
@Entity
public class User {
//添加id自动生成的注解
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")//定义数据库列名为 _id
private int id;
private String name;
private int age;
@Ignore
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Ignore
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User (){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
3.添加dao层接口实现对sqlite数据库的增删查改:
/**
* 该接口里面实现的是对于数据库进行增删查改的注解开发SQL语句
*/
@Dao
public interface UserDao {
//插入数据
@Insert
void insertUser(User...users);
//删除(可以传递如何参数进行查找删除)
@Delete
void delete(User... users);
//修改
@Update
void updateUser(User... users);
//查询全部数据
@Query("select * from user")
List<User> findAll();
//查询name查找
@Query("select * from user where name=:name")
List<User> findByName(String... name);
//根据id查找
@Query("select * from user where _id=:id")
User findById(int... id);
//删除数据库表全部数据
@Query("delete from user")
void DeleteAll();
}
4.创建Datebase继承RoomDatabase实现创建数据库和创建表
/**
* 这是一个抽象类用于MainActiyity实现里面的抽象方法
* 1.添加注解 创建或者关联表数据
*/
@Database(entities = {User.class},version = 2,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
//单例模式 返回db
private static UserDatabase INSTANCE;
//用户操作Dao,必须暴露dao,dao被用户拿到后,就能进行增删查改
public abstract UserDao getUserDao();
public static synchronized UserDatabase getInstance(Context context){
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder
(context.getApplicationContext(),UserDatabase.class,"say.db")
//数据库默认异步线程
//用于测试:强制开机 主线程也可以操作数据库(测试可以用,真实环境不要用)
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}
}
5.最后在MainActitity类里面调用Dao层方法实现增删查改
/**
* room实现sqlite数据库的crud
* 1.添加依赖
* 2.添加实体类
* 3.添加接口类 实现增删查改的注解开发SQL语句
* 4.添加类继承RoomDataBase 实现创库创表
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//插入两个数据
public void insert(View view){
//id属于自增不用赋值
User user1 =new User("admin",12);
User user2 = new User("test",13);
UserDatabase.getInstance(this)
.getUserDao()
.insertUser(user1,user2);
System.out.println("插入数据成功");
}
//条件删除:通过id筛查数据进行对比删除
public void delete(View view){
User user = new User();
user.setId(1);
UserDatabase.getInstance(this).getUserDao().delete(user);
System.out.println("根据条件id删除数据成功");
}
//条件修改:id
public void update(View view){
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(14);
UserDatabase.getInstance(this).getUserDao().updateUser(user);
System.out.println("根据id修改数据成功");
}
//条件查询 根据findByName
public void findByName(View view){
String name ="amdin";
List<User> list = UserDatabase.getInstance(this).getUserDao().findByName(name);
for (User user : list){
System.out.println(user.toString());
Log.e("tt", user.toString());
}
}
//条件查询:根据findById
public void findById(View view){
Integer id = 1;
User user = UserDatabase.getInstance(this).getUserDao().findById(id);
System.out.println("数据响应成功"+user.toString());
Log.e("tt", user.toString());
}
//条件查询全部:findAll
public void findAll(View view){
List<User> list = UserDatabase.getInstance(this).getUserDao().findAll();
for (User u : list){
System.out.println(u.toString());
Log.e("tt", u.toString());
}
}
//删除全部数据
public void deleteAll(View view){
UserDatabase.getInstance(this).getUserDao().DeleteAll();
System.out.println("删除全部数数据成功");
}
}
7.activity_main.xml里面简单布局,此处简单实现一下就可以了:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:text="插入数据"
android:onClick="insert"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="根据条件删除数据"
android:onClick="delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="根据条件修改数据"
android:onClick="update"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="根据name查询数据"
android:onClick="findByName"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="根据ID查询数据"
android:onClick="findById"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="查询全部数据"
android:onClick="findAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="删除全部数据"
android:onClick="deleteAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
android:onClick="insert" insert对应的就是咱们MainActiyity里面写的方法,
public void insert(View view){} 通过View view绑定实现监听点击触发事件