Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一个update的问题 #647

Closed
HAHH9527 opened this issue Aug 21, 2020 · 4 comments
Closed

一个update的问题 #647

HAHH9527 opened this issue Aug 21, 2020 · 4 comments

Comments

@HAHH9527
Copy link

HAHH9527 commented Aug 21, 2020

一个实体类

/**
 * @param name 文档名称
 * @param folderId 所属文件夹ID 为-1则直接显示在最外面
 * @param createTime 创建时间
 * @param updateTime 修改时间
 * @param isFolder 是否为文件夹
 */
@Parcelize
data class DocOrFolderBean(
    var name: String = "",
    var folderId: Long? = -1,
    var createTime: Date = Calendar.getInstance().time,
    var updateTime: Date = Calendar.getInstance().time,
    var isFolder: Boolean = false
) : LitePalSupport(), Parcelable {
    val id: Long = 0
}

其对象

DocOrFolderBean(name=新文档, folderId=0, createTime=Thu Aug 20 09:47:13 GMT+08:00 2020, updateTime=Thu Aug 20 09:47:13 GMT+08:00 2020, isFolder=false)

val docBean: DocOrFolderBean
//DocOrFolderBean(name=新文档, folderId=0, createTime=Thu Aug 20 09:47:13 GMT+08:00 2020, updateTime=Thu Aug 20 09:47:13 GMT+08:00 2020, isFolder=false)
docBean.folderId = -1
docBean.update(docBean.id) //之后再次查询 数据库内此条记录folderId仍为0
//如果将folderId改为其他值(-3,-2,0,1,2),则正常update

运行环境

LitePal 3.2.1
targetSdkVersion 29
小米8 Android10 MIUI12(20.8.13)/红米K20尊享版 Android10 MIUI12(20.8.19)

@HAHH9527
Copy link
Author

所有情况下,update返回值,修改计数为1,是正常的

@guolindev
Copy link
Owner

guolindev commented Aug 24, 2020

从你给出的代码里面,我看不出来你使用的update的方式,因为你的docBean并没有实例化,所以我不知道你是在什么对象上调用的docBean.folder = -1

@HAHH9527
Copy link
Author

HAHH9527 commented Aug 24, 2020

查询代码

    enum class DocOrFolderBeanOrder {
        NameAsc,
        NameDesc,
        CreateTimeAsc,
        CreateTimeDesc,
        UpdateTimeAsc,
        UpdateTimeDesc,
    }

    /**
     * 查找主页文档列表
     * 输入folderId则只查找对应文件夹文档列表
     */
    fun findMainDocOrFolderBean(
        docOrFolderBeanOrder: DocOrFolderBeanOrder? = null,
        folderId: Long = -1
    ): List<DocOrFolderBean> {
        val whereSQL =
            if (folderId < 0) "(isfolder = 0 AND folderid = -1) OR isfolder = 1"
            else "isfolder = 0 AND folderid = $folderId"
        return if (docOrFolderBeanOrder == null) {
            LitePal.where(whereSQL).find()
        } else
            LitePal.where(whereSQL).order(
                when (docOrFolderBeanOrder) {
                    DocOrFolderBeanOrder.NameAsc -> "name ASC"
                    DocOrFolderBeanOrder.NameDesc -> "name DESC"
                    DocOrFolderBeanOrder.CreateTimeAsc -> "createtime ASC"
                    DocOrFolderBeanOrder.CreateTimeDesc -> "createtime DESC"
                    DocOrFolderBeanOrder.UpdateTimeAsc -> "updatetime ASC"
                    DocOrFolderBeanOrder.UpdateTimeDesc -> "updatetime DESC"
                }
            ).find()
    }

调用

val docOrFolderBeanList = findMainDocOrFolderBean(folderId = 2)
val docBean: DocOrFolderBean = docOrFolderBeanList[0]
//Log----docBean.id=1
//Log----docBean=DocOrFolderBean(name=新文档, folderId=0, createTime=Thu Aug 20 09:47:13 GMT+08:00 2020, updateTime=Thu Aug 20 09:47:13 GMT+08:00 2020, isFolder=false)
docBean.folderId = -1
docBean.update(docBean.id) //之后再次查询 数据库内此条记录folderId仍为0
//如果将folderId改为其他值(-3,-2,0,1,2),则正常update

数据库
image

docOrFolderBeanList 其中任意一条将 folderId 改为 -1 后 docBean.update(docBean.id)均无实际效果

@guolindev
Copy link
Owner

这个问题是因为,你的folderId的默认值是-1,update方法会忽略所有值是默认值的修改,至于原因可以参考这个issue #32

你的这种使用场景下其实已经很简单了,因为你都已经把docBean查询出来了,对象查询出来的情况下要更新数据,只要重新save一遍就行了,关于这部分的用法在主页readme里面就有说明 https://github.com/guolindev/LitePal#4-update-data

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants