greendao3,阿里Android岗面试百题

本文介绍了如何在Android应用中使用greendao库进行数据存储,并展示了如何实现数据库加密,包括创建数据实体、管理数据库、增删改查等操作。示例代码详细解释了如何在数据库操作中确保数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

}

@Keep

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public Student(Long id, String name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

@Keep

public Long getId() {

return id;

}

@Keep

public void setId(Long id) {

this.id = id;

}

@Keep

public String getName() {

return name;

}

@Keep

public void setName(String name) {

this.name = name;

}

@Keep

public int getAge() {

return age;

}

@Keep

public void setAge(int age) {

this.age = age;

}

@Keep

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (!(o instanceof Student)) return false;

Student student = (Student) o;

return name.equals(student.name);

}

@Keep

@Override

public int hashCode() {

return (int) (id ^ (id >>> 32));

}

@Keep

@Override

public String toString() {

return “Student{” +

“id=” + id +

“, name=’” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

  • 修复一下工程,自动生成greendao包下的类(就是点击一下小锤子),你会自动生成上图中greendao包中的类。

  • 开始使用,创建管理类

package com.yintong.secure.simple.encryptiongreendao.dao;

import android.content.Context;

import com.yintong.secure.simple.encryptiongreendao.greendao.DaoMaster;

import com.yintong.secure.simple.encryptiongreendao.greendao.DaoSession;

import org.greenrobot.greendao.database.Database;

public class DbManager {

// 是否加密

public static final boolean ENCRYPTED = true;

private static DbManager mDbManager;

private static DaoMaster.DevOpenHelper mDevOpenHelper;

private static DaoMaster mDaoMaster;

private static DaoSession mDaoSession;

private DbManager(Context context, String dbName, String passwprd) {

// 初始化数据库信息

mDevOpenHelper = new DaoMaster.DevOpenHelper(context, dbName);

getDaoMaster(context, dbName, passwprd);

getDaoSession(context, dbName, passwprd);

}

public static DbManager getInstance(Context context, String dbName, String passwprd) {

if (null == mDbManager) {

synchronized (DbManager.class) {

if (null == mDbManager) {

mDbManager = new DbManager(context, dbName, passwprd);

}

}

}

return mDbManager;

}

/**

  • 获取可读数据库

  • @param context

  • @return

*/

public static Database getReadableDatabase(Context context, String dbName, String passwprd) {

if (null == mDevOpenHelper) {

getInstance(context, dbName, passwprd);

}

if (ENCRYPTED) {//加密

return mDevOpenHelper.getEncryptedReadableDb(passwprd);

} else {

return mDevOpenHelper.getReadableDb();

}

}

/**

  • 获取可写数据库

  • @param context

  • @param dbName

  • @param passwprd

  • @return

*/

public static Database getWritableDatabase(Context context, String dbName, String passwprd) {

if (null == mDevOpenHelper) {

getInstance(context, dbName, passwprd);

}

if (ENCRYPTED) {//加密

return mDevOpenHelper.getEncryptedWritableDb(passwprd);

} else {

return mDevOpenHelper.getWritableDb();

}

}

/**

  • 获取DaoMaster

  • @param context

  • @param dbName

  • @param passwprd

  • @return

*/

public static DaoMaster getDaoMaster(Context context, String dbName, String passwprd) {

if (null == mDaoMaster) {

synchronized (DbManager.class) {

if (null == mDaoMaster) {

mDaoMaster = new DaoMaster(getWritableDatabase(context, dbName, passwprd));

}

}

}

return mDaoMaster;

}

/**

  • 获取DaoSession

  • @param context

  • @param dbName

  • @param passwprd

  • @return

*/

public static DaoSession getDaoSession(Context context, String dbName, String passwprd) {

if (null == mDaoSession) {

synchronized (DbManager.class) {

// mDaoSession = getDaoMaster(context,dbName,passwprd).newSession();

mDaoSession = getDaoMaster(context, dbName, passwprd).newDevSession(context, dbName);

}

}

return mDaoSession;

}

}

  • 增删改查

package com.yintong.secure.simple.encryptiongreendao.dao;

import android.content.Context;

import com.yintong.secure.simple.encryptiongreendao.bean.Student;

import com.yintong.secure.simple.encryptiongreendao.greendao.StudentDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

public class StudentDaoOpe {

private static final String DB_NAME = “test.db”;

private static final String PASSWPRD = “password”;

/**

  • 添加数据至数据库

  • @param context

  • @param stu

*/

public static void insertData(Context context, Student stu) {

// DbManager.getDaoSession(context, DB_NAME,PASSWPRD).getStudentDao().insert(stu);

DbManager.getDaoSession(context, DB_NAME,PASSWPRD).getStudentDao().insertOrReplace(stu);

}

/**

  • 将数据实体通过事务添加至数据库

  • @param context

  • @param list

*/

public static void insertData(Context context, List list) {

if (null == list || list.size() <= 0) {

return;

}

// DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().insertInTx(list);

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().insertOrReplaceInTx(list);

}

/**

  • 添加数据至数据库,如果存在,将原来的数据覆盖

  • 内部代码判断了如果存在就update(entity);不存在就insert(entity);

  • @param context

  • @param student

*/

public static void saveData(Context context, Student student) {

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().save(student);

}

/**

  • 删除数据至数据库

  • @param context

  • @param student 删除具体内容

*/

public static void deleteData(Context context, Student student) {

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().delete(student);

}

/**

  • 根据id删除数据至数据库

  • @param context

  • @param id 删除具体内容

*/

public static void deleteByKeyData(Context context, long id) {

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().deleteByKey(id);

}

/**

  • 删除全部数据

  • @param context

*/

public static void deleteAllData(Context context) {

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().deleteAll();

}

/**

  • 更新数据库

  • @param context

  • @param student

*/

public static void updateData(Context context, Student student) {

DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().update(student);

}

/**

  • 查询所有数据

  • @param context

  • @return

*/

public static List queryAll(Context context) {

QueryBuilder builder = DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().queryBuilder();

return builder.build().list();

}

/**

  • 根据id,其他的字段类似

  • @param context

  • @param id

  • @return

*/

public static List queryForId(Context context, long id) {

QueryBuilder builder = DbManager.getDaoSession(context, DB_NAME, PASSWPRD).getStudentDao().queryBuilder();

/**

  • 返回当前id的数据集合,当然where(这里面可以有多组,做为条件);

  • 这里build.list();与where(StudentDao.Properties.Id.eq(id)).list()结果是一样的;

  • 在QueryBuilder类中list()方法return build().list();

*/

// Query build = builder.where(StudentDao.Properties.Id.eq(id)).build();

// List list = build.list();

return builder.where(StudentDao.Properties.Id.eq(id)).list();

}

}

  • mainactivity布局
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:id="@+id/activity_main"

android:layout_width=“match_parent”

android:layout_height=“match_parent”

tools:context=".MainActivity">

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“horizontal”>

<Button

android:id="@+id/add"

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“增” />

<Button

android:id="@+id/delete"

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“删” />

<Button

android:id="@+id/updata"

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“改” />

<Button

android:id="@+id/check"

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“查” />

<Button

android:id="@+id/deleteAll"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_centerInParent=“true”

android:layout_weight=“1”

android:text=“删除全部” />

<Button

android:id="@+id/check_id"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_above="@id/deleteAll"

android:layout_centerInParent=“true”

android:text=“根据id查” />

  • mainActivity

package com.yintong.secure.simple.encryptiongreendao;

import android.content.Context;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import com.yintong.secure.simple.encryptiongreendao.bean.Student;

import com.yintong.secure.simple.encryptiongreendao.dao.StudentDaoOpe;

import java.util.ArrayList;

import java.util.List;

import butterknife.Bind;

import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

@Bind(R.id.add)

Button add;

@Bind(R.id.delete)

Button delete;

@Bind(R.id.updata)

Button updata;

@Bind(R.id.check)

Button check;

@Bind(R.id.deleteAll)

Button deleteAll;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值