【毕设】基于Android的实验室签到系统设计 - 框架一 - GreenDao初阶知识

介绍

配置

1.在项目目录下build.gradle下添加插件

  • 文件位置
    在这里插入图片描述
  • 添加插件代码
dependencies {
     ...
     classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

     // NOTE: Do not place your application dependencies here; they belong
     // in the individual module build.gradle files
 }

2.在app目录下的build.gradle下添加插件依赖

  • 文件位置
    在这里插入图片描述
  • 添加插件依赖代码
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'

老版本是以上方式,新版本是下面这种方式

plugins {
    id 'com.android.application'
    id 'org.greenrobot.greendao'
}
  • 再继续添加依赖库
dependencies {
	...
    implementation 'org.greenrobot:greendao:3.3.0' // add library
}
  • 继续初始化GreenDao版本配置
...
}
greendao{
    schemaVersion 1  // 数据库版本号 每次升级数据库都需要改变版本,只能增加
    daoPackage 'com.fhy.greendao' // 设置DaoMaster、DaoSession、xxxDao包名
    targetGenDir 'src/main/java' // 设置DaoMaster、DaoSession、xxxDao目录

}
dependencies {
...

创建实例类

@Entity(nameInDb = "Person")
// Entity是GreenDao的实体注解(用于标识当前实体需要GreenDao生成代码)
// 表格名默认是实体类名,如果加上@Entity(nameInDb = "Person")
// generateConstructors 和 generateGettersSetters 默认为true,标识自动生成构造器和getter and setter方法。
public class Person {

    @Id(autoincrement = true)//设置自增长
    //@Id表示主键id,对应数据表中的Id字段,括号中表示自增长,注意是Long,不是long类型。
    private Long id;

    @Property(nameInDb = "Name")
    // 作为表的列名,nameInDbnameInDb可以指定特定字段名,不写默认为变量名。
    @Index(unique = true)
    // 设置唯一性,即不能出现相同的名字
    private String name;

    private int age;
}

自动生成实体类代码

  • 写完上述代码,直接 Make Project
  • 自动生成Person类的 构造器getter and setter 方法。
  • 然后在 src/main/java目录下可以看到包名为com.fhy.greendao的三个文件,分为为:DaoMaster、DaoSession、xxxDao。
  • 自动生成的代码如下:
@Entity(nameInDb = "Person")
// Entity是GreenDao的实体注解(用于标识当前实体需要GreenDao生成代码)
// 表格名默认是实体类名,如果加上@Entity(nameInDb = "Person")
// generateConstructors 和 generateGettersSetters 默认为true,标识自动生成构造器和getter and setter方法。
public class Person {

    @Id(autoincrement = true)//设置自增长
    //@Id表示主键id,对应数据表中的Id字段,括号中表示自增长,注意是Long,不是long类型。
    private Long id;

    @Property(nameInDb = "Name")
    // 作为表的列名,nameInDbnameInDb可以指定特定字段名,不写默认为变量名。
    @Index(unique = true)
    // 设置唯一性,即不能出现相同的名字
    private String name;

    private int age;

    @Generated(hash = 1145075130)
    public Person(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Generated(hash = 1024547259)
    public Person() {
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

操作数据库

创建数据库并获得三个核心对象

public class MainActivity extends AppCompatActivity {

    private DaoMaster.DevOpenHelper helper;
    private SQLiteDatabase db;
    private DaoMaster master;
    private DaoSession session;
    private PersonDao personDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 创建数据库
        helper = new DaoMaster.DevOpenHelper(MainActivity.this,"FhyDatabase.db",null);
        db = helper.getWritableDatabase();
        // 获得DaoMaster对象mastere
        master = new DaoMaster(db);
        // 获得DaoSession对象session
        session = master.newSession();
        // 获得PersonDao对象personDao
        personDao = session.getPersonDao();

    }
}
  • 利用adb命令查询数据库FhyDatabase,结果如下所示,说明创建成功,数据库中有Person表,并获得建表命令。
1|root@generic_x86:/data/data/com.example.greendaotest/databases # ls
ls
FhyDatabase
FhyDatabase.db
FhyDatabase.db-journal
root@generic_x86:/data/data/com.example.greendaotest/databases # sqlite3 FhyDatabase.db
qlite3 FhyDatabase.db                                                         <
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> .table
.table
Person            android_metadata
sqlite> .schema
.schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE "Person" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT ,"Name" TEXT,"AGE" INTEGER NOT NULL );
CREATE UNIQUE INDEX IDX_Person_Name ON "Person" ("Name" ASC);
sqlite>

添加数据

  • 代码:
// 添加数据
private void insertData(){
    // 创建Person对象
    Person person1 = new Person(1L,"fhy",22);
    Person person2 = new Person(2L,"xiaoming",23);
    personDao.insert(person1);
    personDao.insert(person2);
}
  • adb查询
sqlite> select * from Person;
select * from Person;
1|fhy|22
2|xiaoming|23
sqlite>

查询数据

  • 代码
// 查询数据
private void queryData(){
    List<Person> list = personDao.queryBuilder().list();
    for(Person person : list){
        Log.d("person",person.toString());
    }
}
  • 日志表
    在这里插入图片描述

更新数据

  • 代码
// 更新数据
private void updateData(){
    // 先获取Person表的第二条数据
    List<Person> list = personDao.queryBuilder().list();
    Person originPerson = list.get(1);

    // 更新数据
    originPerson.setName("xiaowang");
    personDao.insertOrReplace(originPerson);

    // 继续打印出来
    List<Person> list2 = personDao.queryBuilder().list();
    for(Person person : list2){
        Log.d("person",person.toString());
    }
}
  • 日志表,看出来替换成功
    在这里插入图片描述

删除数据

  • 代码
private void deleteData(){
    // 先获取Person表的第一条数据
    List<Person> list = personDao.queryBuilder().list();
    Person originPerson = list.get(0);
    // 删除数据
    personDao.delete(originPerson);

    // 继续打印出来
    List<Person> list2 = personDao.queryBuilder().list();
    for(Person person : list2){
        Log.d("person",person.toString());
    }
}
  • 日志表,删除成功,只剩下第二条数据。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值