es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualice el valor jsonb en PostgreSQL utilizando JOOQ.

En mi proyecto de Java estoy utilizando JOOQ y quiero actualizar un valor JSONB.
Pero mi compilación falla.

Escribí el siguiente código:

DSL.using(connection).update(USER_SETTINGS)
                .set(USER_SETTINGS.SETTING_VALUE, field("{"filtersValue":{"page":0,"size":100}, "visibleCount":100}", JSONB.class))
                .where(USER_SETTINGS.USER_ID.eq(98383L))
                .execute();

Y obtuve el siguiente mensaje:

org.jooq.exception.DataAccessException: 
SQL [update "sbcm_sys"."user_settings" set "setting_value" = "filtersValue":{"page":0,"size":100, "visibleCount":100} where "sbcm_sys"."user_settings"."user_id" = ?]; ERROR: syntax error at or near ":"
  Position: 71
Caused by: org.postgresql.util.PSQLException: 
ERROR: syntax error at or near ":"
  Position: 71

¿Dónde cometí el error?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un error de sintaxis en el código. El mensaje de error apunta al símbolo de dos puntos, lo que sugiere que puede haber un problema con el valor JSONB.

    Al inspeccionar más de cerca el código, parece que el valor JSONB no está formateado correctamente. El método del campo no debe incluir comillas dobles escapadas en la cadena JSON.

    Para solucionar el problema, intente actualizar el código para eliminar las comillas dobles escapadas de la cadena JSON:

    DSL.using(connection).update(USER_SETTINGS)
        .set(USER_SETTINGS.SETTING_VALUE, field("{\"filtersValue\":{\"page\":0,\"size\":100}, \"visibleCount\":100}", JSONB.class))
        .where(USER_SETTINGS.USER_ID.eq(98383L))
        .execute();
    

    Este código debería actualizar el valor JSONB sin errores de sintaxis.

Comments are closed.