Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何使用jooq在列名和it';s在运行时确定的值_Kotlin_Jooq - Fatal编程技术网

Kotlin 如何使用jooq在列名和it';s在运行时确定的值

Kotlin 如何使用jooq在列名和it';s在运行时确定的值,kotlin,jooq,Kotlin,Jooq,我有一个表列名列表,它的值将在运行时确定。现在,我正在使用以下方法来实现feet,这需要为每个列名将field转换为TableField。还有更好的办法吗 override fun updateFields(job: Job, jsonObject: JsonObject, handler: Handler<AsyncResult<Job?>>): JobQService { val updateFieldsDsl = dslContext.update(JO

我有一个表列名列表,它的值将在运行时确定。现在,我正在使用以下方法来实现feet,这需要为每个列名将
field
转换为
TableField
。还有更好的办法吗

override fun updateFields(job: Job, jsonObject: JsonObject, handler: Handler<AsyncResult<Job?>>): JobQService {


    val updateFieldsDsl = dslContext.update(JOB)

    var feildSetDsl: UpdateSetMoreStep<*>? = null

    jsonObject.map.keys.forEach { column ->
        feildSetDsl = if (feildSetDsl == null) {
            updateFieldsDsl.set(JOB.field(column) as TableField<Record, Any>, jsonObject.getValue(column))
        } else {
            feildSetDsl!!.set(JOB.field(column) as TableField<Record, Any>, jsonObject.getValue(column))
        }
    }

    val queryDsl = feildSetDsl!!.where(JOB.ID.eq(job.id))

    jdbcClient.rxUpdateWithParams(queryDsl.sql, JsonArray(queryDsl.bindValues)).subscribeBy(
            onSuccess = { handler.handle(Future.succeededFuture(job)) },
            onError = { handler.handle(Future.failedFuture(it)) }

    )

    return this;
}
override-fun-updateFields(job:job,jsonObject:jsonObject,handler:handler):JobQService{
val updateFieldsDsl=dslContext.update(作业)
var feildSetDsl:UPDATESETMOSTEP?=null
jsonObject.map.keys.forEach{column->
feildSetDsl=if(feildSetDsl==null){
updateFieldsDsl.set(作业.字段(列)为TableField,jsonObject.getValue(列))
}否则{
feildSetDsl!!.set(JOB.field(column)作为TableField,jsonObject.getValue(column))
}
}
val queryDsl=feildSetDsl!!.where(JOB.ID.eq(JOB.ID))
jdbcClient.rxUpdateWithParams(queryDsl.sql,JsonArray(queryDsl.bindValues)).subscribeBy(
onSuccess={handler.handle(Future.succeededFuture(job))},
onError={handler.handle(Future.failedFuture(it))}
)
归还这个;
}

我不确定你所说的“更好”是什么意思,但有一种方法似乎对你正在尝试做的事情很有帮助。请参阅javadoc:

UPDATESETMOSTEP集合(映射)

在UPDATE语句中为字段设置一个值。 键可以是字符串、名称或字段类型

值可以是类型或字段。jOOQ将尝试将值转换为相应字段的类型


@纳加拉朱努卡:酷,很高兴我能帮上忙!