Comment utiliser jooq pour mettre à jour la table lorsque les noms de colonne et ses valeurs sont déterminés au moment de l'exécution
Nagaraju Nooka
J'ai la liste des noms de colonne de table et ses valeurs qui seront déterminées au moment de l'exécution. En ce moment , je me sers comme suit pour atteindre les pieds qui exige coulée Filed
à TableField
pour chaque nom de colonne. Y a-t-il une meilleure façon ?
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;
}
Lukas Eder
Je ne sais pas trop ce que vous entendez par «mieux», mais il existe une méthode UpdateSetStep.set(Map)
qui semble être utile pour ce que vous essayez de faire. Voir le javadoc:
UpdateSetMoreStep set (Map <?,?> Map)
Définissez une valeur pour un champ dans l'instruction UPDATE. Les clés peuvent être de type String, Name ou Field.
Les valeurs peuvent être de type <T> ou de champ <T>. jOOQ tentera de convertir les valeurs dans le type de leur champ correspondant.