Android第十一讲笔记(SqLite数据库,Room框架)

目录

  • SQLite数据库
  • 1.SQLite数据库实际操作
    • 1.OpenSqlHelper工具类(用于它可以帮我们去加载驱动)
    • 2.在Activity中进行增删改查操作
      • 1.增加数据
      • 2.删除数据
      • 3.修改数据
      • 4.查询数据
  • 2.Room框架
    • 1.前期准备
    • 2.增删改查
      • 1.增加数据
      • 2.删除数据
      • 3.修改数据
      • 4.查找数据

SQLite数据库

  • MySQL Oracle
  • SQLite
    SQLite一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。
    但是其不适合处理大规模数据。
    SQLite常用来存储每一个用户各自的信息。
    Android第十一讲笔记(SqLite数据库,Room框架)_第1张图片

1.SQLite数据库实际操作

运行 Database Inspector 需要在API Level 26 或者更高的设备上。Database Inspector是一个动态数据库工具,可以查询和修改表数据,执行查询语句,执行 Dao 文件中定义的 Room 查询语句。
Android第十一讲笔记(SqLite数据库,Room框架)_第2张图片

1.OpenSqlHelper工具类(用于它可以帮我们去加载驱动)

在这个工具类中我们同时也建了一个表
后续用这个工具类可以进行增删改查的操作
Android第十一讲笔记(SqLite数据库,Room框架)_第3张图片

public class OpenSqlHelper extends SQLiteOpenHelper {
     

    // name  -> 数据库名字
    public OpenSqlHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
     
        super(context, name, factory, version);
    }

    //     建表
    @Override
    public void onCreate(SQLiteDatabase db) {
     
        db.execSQL("create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer) ");
    }

    //    更新表
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     

    }
}

2.在Activity中进行增删改查操作

首先我们在activity_main.xml布局文件中增加四个按钮来设置点击之后增删改查的操作

activity_main.xml


<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="126dp"
        android:text="增加数据"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:text="删除数据"
        app:layout_constraintEnd_toEndOf="@+id/button"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="49dp"
        android:text="查询数据"
        app:layout_constraintStart_toStartOf="@+id/button2"
        app:layout_constraintTop_toBottomOf="@+id/button2" />

androidx.constraintlayout.widget.ConstraintLayout>

1.增加数据

Android第十一讲笔记(SqLite数据库,Room框架)_第4张图片

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
//                增加数据
                OpenSqlHelper openSqlHelper=new OpenSqlHelper(MainActivity.this,"test123",null,1);
                SQLiteDatabase sqLiteDatabase= openSqlHelper.getWritableDatabase();
//                ContengValues->HashMap
                ContentValues contentValues=new ContentValues();
                contentValues.put("username","a碟");
                contentValues.put("password","123456");
                contentValues.put("age",19);
                sqLiteDatabase.insert("user",null,contentValues);
            }
        });

在多次点击增加之后
Android第十一讲笔记(SqLite数据库,Room框架)_第5张图片

2.删除数据

Android第十一讲笔记(SqLite数据库,Room框架)_第6张图片

findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        OpenSqlHelper openSqlHelper=new OpenSqlHelper(MainActivity.this,"test123",null,1);
        SQLiteDatabase sqLiteDatabase=openSqlHelper.getWritableDatabase();
        String id="1";
        String username="a碟";
        sqLiteDatabase.delete("user","id=? and username = ?",new String[]{
     id,username});
    }
});

3.修改数据

Android第十一讲笔记(SqLite数据库,Room框架)_第7张图片

findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        OpenSqlHelper openSqlHelper=new OpenSqlHelper(MainActivity.this,"test123",null,1);
        SQLiteDatabase sqLiteDatabase = openSqlHelper.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("username","b碟");
        String id="5";
        sqLiteDatabase.update("user",contentValues,"id= ?",new String[]{
     id});
    }
});

4.查询数据

Android第十一讲笔记(SqLite数据库,Room框架)_第8张图片

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        OpenSqlHelper openSqlHelper=new OpenSqlHelper(MainActivity.this,"test123",null,1);
        SQLiteDatabase sqLiteDatabase = openSqlHelper.getWritableDatabase();
        String username="a碟";
        Cursor cursor=sqLiteDatabase.query("user",null,"username = ?",new String[]{
     username},null,null,null);
        while(cursor.moveToNext()){
     
            String username1=cursor.getString(cursor.getColumnIndex("username"));
            int id1=cursor.getInt(cursor.getColumnIndex("id"));
            Log.i("MainActivity","username= "+username1+" id = "+id1);
        }
    }

});

2.Room框架

Room是谷歌官方的数据库ORM(对象关系映射)框架,使用起来非常方便

Room提供了一个SQLite之上的抽象层,使得在充分利用SQLite功能的前提下顺畅的访问数据库。

1.前期准备

首先新建一个接口UserDao

这个接口中写了需要的增删改查方法,并在对应的位置标记了对应的注解。

在添加注解的时候爆红,光标点击在对应的爆红的位置按住alt+enter即可选择导入依赖

在DAO(data access object)中,可以使用SQL语句进行对数据库的操作并且将这些语句与Java中方法关联调用,编译器会检查SQL语句并且通过注解生成对应的查询语句,例如@Insert。
注意:
1、DAO必现是抽象类或者接口
2、所有的查询语句必须在单独的线程里面执行。
Android第十一讲笔记(SqLite数据库,Room框架)_第9张图片

package com.hnucm.android_05_27;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface UserDao {
     //提供表的增删改查方法
    @Insert
    void addUser(User user);

    @Delete
    void deleteUser(User user);

    @Update
    void update(User user);

    @Query("select * from user")
    List<User> find();

    @Query("select * from user where id = :id")
    List<User> findAllUserById(int id);

//    模糊搜索
    @Query("select * from user where username like '%' || :name ||'%'")
    List<User>findAllUsersByName(String name);

}

抽象类UserDatabase

package com.hnucm.android_05_27;

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {
     User.class},version = 1,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
     
    public abstract  UserDao  getUserDao();
}

java类UserUser的属性与数据库中的字段需要一一对应
Room Database中的Entity表示一张数据表结构,一个Entity实例就是表中的一行,如定义一个User类的Entity。
重点:
1、一个Entity对象代表数据表中的一行,一个Entity类代表一张数据表。
2、Entity中的成员变量都是数据表中的列。
3、一个Java类定义成Entity只要加上Entity注解就可以了。
Android第十一讲笔记(SqLite数据库,Room框架)_第10张图片

package com.hnucm.android_05_27;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

//与数据库中的字段一一对应
@Entity
public class User {
     
    @PrimaryKey(autoGenerate = true)
    public int id;
    @ColumnInfo(name="username")
    public String username;
    public String password;
    public int age;
}

2.增删改查

Android第十一讲笔记(SqLite数据库,Room框架)_第11张图片
之后可以通过UserDao的实现类来对数据库进行增删改查

1.增加数据

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        User user=new User();
        user.username="test123";
        user.password="123456";
        user.age=20;
        userDao.addUser(user);
    }
});

2.删除数据

findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        User user=new User();
        user.username="test123";
        userDao.deleteUser(user);
    }
});

Android第十一讲笔记(SqLite数据库,Room框架)_第12张图片

3.修改数据

findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
                User user=new User();
                user.username="test222";
                user.id=5;
                userDao.update(user);
            }
        });

4.查找数据

1.普通查询

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        List<User>userList=userDao.find();
        for(User user:userList){
     
            Log.i("MainActivity","id = "+user.id+"username = "+user.username);
        }
    }
});

2.按照id查询

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        int id=2;
        List<User>userList=userDao.findAllUserById(id);
        for(User user:userList){
     
            Log.i("MainActivity","id = "+user.id+"username = "+user.username);
        }
    }
});

3.模糊查询

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
     
    @Override
    public void onClick(View v) {
     
        List<User>userList=userDao.findAllUsersByName("test");
        for(User user:userList){
     
            Log.i("MainActivity","id = "+user.id+"username = "+user.username);
        }
    }
});

根据以上几个案例,我们发现使用room框架基于注解开发,非常简单的就完成了增删改查的操作。

你可能感兴趣的:(android开发,笔记,android,安卓,android,studio)