Android Room实现SQLite增删查改

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绑定实现监听点击触发事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,SQLite是一个常用的本地数据库,用于存储应用的数据。使用SQLite进行增删查改(CRUD)操作,可以通过Android的Java或Kotlin API来实现。以下是一些基本步骤: 1. **创建数据库**: - 首先,在`res`目录下创建`database`文件夹,然后在其中创建一个`.db`文件(例如`app.db`),这是SQLite文件的实际位置。 - 在AndroidManifest.xml中添加权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 2. **连接数据库**: - 使用`SQLiteOpenHelper`类来管理数据库版本和事务。创建一个继承自它的子类,并重写`onCreate()`和`onUpgrade()`方法。 ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // ... } ``` 3. **CRUD操作**: - **插入数据** (Insert): - 创建SQL INSERT语句并调用`insert()`方法。 ```java ContentValues contentValues = new ContentValues(); contentValues.put("column_name", "value"); dbHelper.getWritableDatabase().insert("table_name", null, contentValues); ``` - **查询数据** (Read): - 使用`query()`方法执行SQL SELECT查询。 ```java Cursor cursor = dbHelper.rawQuery("SELECT * FROM table_name WHERE column_name = ?", new String[]{"value"}); while (cursor.moveToNext()) { // 获取结果 } cursor.close(); ``` - **更新数据** (Update): - 构造SQL UPDATE语句,并使用`update()`方法。 ```java int rowsAffected = dbHelper.getWritableDatabase().update("table_name", contentValues, "column_name = ?", new String[]{"value"}); ``` - **删除数据** (Delete): - 构造SQL DELETE语句,然后调用`delete()`方法。 ```java int deletedRows = dbHelper.getWritableDatabase().delete("table_name", "column_name = ?", new String[]{"value"}); ``` 4. **事务处理**: - 如果需要确保一组操作要么全部成功要么全部失败,可以使用`beginTransaction()`、`endTransaction()`以及`setTransactionSuccessful()`或`rollback()`。 5. **关闭连接**: - 在完成所有操作后,记得关闭`Cursor`和数据库连接。 ```java cursor.close(); dbHelper.close(); ``` **相关问题--:** 1. Android Studio中的SQLiteOpenHelper类有何作用? 2. 如何在Android Studio中执行带有参数的SQL查询? 3. 在Android中,如何正确处理数据库操作的异常?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值