companion object {
@Volatile
var instance: DbManager? = null
fun getInstance(mContext: Context): DbManager? {
if (instance == null) {
synchronized(DbManager::class) {
if (instance == null) {
instance = DbManager(mContext)
}
}
}
return instance
}
}
/**
-
获取可读数据库
-
@param context
-
@return
*/
fun getReadableDatabase(context: Context): SQLiteDatabase? {
if (null == mDevOpenHelper) {
getInstance(context)
}
return mDevOpenHelper?.getReadableDatabase()
}
/**
-
获取可写数据库
-
@param context
-
@return
*/
fun getWritableDatabase(context: Context): SQLiteDatabase? {
if (null == mDevOpenHelper) {
getInstance(context)
}
return mDevOpenHelper?.getWritableDatabase()
}
/**
-
获取DaoMaster
-
@param context
-
@return
*/
fun getDaoMaster(context: Context): DaoMaster? {
if (null == mDaoMaster) {
synchronized(DbManager::class.java) {
if (null == mDaoMaster) {
mDaoMaster = DaoMaster(getWritableDatabase(context))
}
}
}
return mDaoMaster
}
/**
-
获取DaoSession
-
@param context
-
@return
*/
fun getDaoSession(context: Context): DaoSession? {
if (null == mDaoSession) {
synchronized(DbManager::class.java) {
mDaoSession = getDaoMaster(context)?.newSession()
}
}
return mDaoSession
}
}
步骤五、增删改查,
package tsou.com.simple.greendaoforkotlin.dao
import android.content.Context
import tsou.com.simple.greendaoforkotlin.bean.Student
import tsou.com.simple.greendaoforkotlin.greendao.StudentDao
import tsou.com.simple.greendaoforkotlin.manager.DbManager
class StudentDaoOpe private constructor() {
private object mHolder {
val instance = StudentDaoOpe()
}
companion object {
fun getInstance(): StudentDaoOpe {
return mHolder.instance
}
}
/**
-
添加数据至数据库
-
@param context
-
-
@param stu
*/
fun insertData(context: Context?, stu: Student) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.insert(stu)
}
/**
-
将数据实体通过事务添加至数据库
-
@param context
-
-
@param list
*/
fun insertData(context: Context?, list: List?) {
if (null == list || list.size <= 0) {
return
}
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.insertInTx(list)
}
/**
-
添加数据至数据库,如果存在,将原来的数据覆盖
-
内部代码判断了如果存在就update(entity);不存在就insert(entity);
-
@param context
-
-
@param student
*/
fun saveData(context: Context?, student: Student) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.save(student)
}
/**
-
删除数据至数据库
-
@param context
-
-
@param student 删除具体内容
*/
fun deleteData(context: Context?, student: Student) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.delete(student)
}
/**
-
根据id删除数据至数据库
-
@param context
-
-
@param id 删除具体内容
*/
fun deleteByKeyData(context: Context?, id: Long) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.deleteByKey(id)
}
/**
-
删除全部数据
-
@param context
*/
fun deleteAllData(context: Context?) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.deleteAll()
}
/**
-
更新数据库
-
@param context
-
-
@param student
*/
fun updateData(context: Context?, student: Student) {
DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.update(student)
}
/**
-
查询所有数据
-
@param context
-
-
@return
*/
fun queryAll(context: Context?): MutableList? {
val builder = DbManager.getInstance(context!!)?.getDaoSession(context)?.getStudentDao()?.queryBuilder()
return builder?.build()?.list()
}
/**
-
根据id,其他的字段类似
-
@param context
-
-
@param id
-
-
@return
*/
fun queryForId(context: Context?, id: Long): MutableList? {
val builder = DbManager.getInstance(context!!)?.getDaoSession(context)?.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 tsou.com.simple.greendaoforkotlin
import android.content.Context
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import tsou.com.simple.greendaoforkotlin.bean.Student
import tsou.com.simple.greendaoforkotlin.dao.StudentDaoOpe
class MainActivity : AppCompatActivity() {
private var mContext: Context? = null
private var student: Student? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mContext = this
initData()
initListener()
}
private var studentList = mutableListOf()
/**
- 初始化数据
*/
private fun initData() {
for (i in 0…99) {
student = Student(i.toLong(), “huang” + i, 25)
studentList.add(student!!)//不为null
}
}
private fun initListener() {
/**
- 增
*/
add.setOnClickListener {
StudentDaoOpe.getInstance().insertData(mContext, studentList)
}
/**
- 删
*/
delete.setOnClickListener {
val student = Student(5.toLong(), “haung” + 5, 25)
/**
- 根据特定的对象删除
*/
StudentDaoOpe.getInstance().deleteData(mContext, student)
/**
- 根据主键删除
*/
StudentDaoOpe.getInstance().deleteByKeyData(mContext, 7)
}
/**
- 删除所有
*/
deleteAll.setOnClickListener {
StudentDaoOpe.getInstance().deleteAllData(mContext)
}
/**
- 更新
*/
updata.setOnClickListener {
val student = Student(2.toLong(), “haungxiaoguo”, 16516)
StudentDaoOpe.getInstance().updateData(mContext, student)
}
/**
- 查询全部
*/
check.setOnClickListener {
val students = StudentDaoOpe.getInstance().queryAll(mContext)
for (i in students!!.indices) {
Log.i(“Log”, students[i].name)
}
}
/**
- 根据id查询
*/
check_id.setOnClickListener {
val students = StudentDaoOpe.getInstance().queryForId(mContext, 50)
for (i in students!!.indices) {
Log.i(“Log”, students[i].name)
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
).queryForId(mContext, 50)
for (i in students!!.indices) {
Log.i(“Log”, students[i].name)
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-JJ1AcLBu-1715497545121)]
[外链图片转存中…(img-q3g0gSlJ-1715497545123)]
[外链图片转存中…(img-Zt2EZR1i-1715497545124)]
[外链图片转存中…(img-eEZpE2ZR-1715497545124)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!