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

SQLite数据库

  • MySQL Oracle
  • SQLite
    SQLite一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。
    但是其不适合处理大规模数据。
    SQLite常用来存储每一个用户各自的信息。
    在这里插入图片描述

1.SQLite数据库实际操作

运行 Database Inspector 需要在API Level 26 或者更高的设备上。Database Inspector是一个动态数据库工具,可以查询和修改表数据,执行查询语句,执行 Dao 文件中定义的 Room 查询语句。
在这里插入图片描述

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

在这个工具类中我们同时也建了一个表
后续用这个工具类可以进行增删改查的操作
在这里插入图片描述

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

<?xml version="1.0" encoding="utf-8"?>
<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.增加数据

在这里插入图片描述

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);
            }
        });

在多次点击增加之后
在这里插入图片描述

2.删除数据

在这里插入图片描述

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.修改数据

在这里插入图片描述

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.查询数据

在这里插入图片描述

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、所有的查询语句必须在单独的线程里面执行。
在这里插入图片描述

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注解就可以了。
在这里插入图片描述

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.增删改查

在这里插入图片描述
之后可以通过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);
    }
});

在这里插入图片描述

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框架基于注解开发,非常简单的就完成了增删改查的操作。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a碟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值