escapeSyntaxCallMode en PostgreSQL v11 y superiores

java jdbcA partir de la entrada anterior sobre CallableStatement, he estado jugueteando, con PostgreSQL 12. Y ¿cómo no? problemas

Resulta que usando la sintaxis especial de CallableStatement, llamada JDBC scape syntax, no me funcionaba la llamada a procedimientos desde Java. Es decir, esto

connection.prepareCall("{call insert_data(?,?,?)}")

no me funcionaba, daba error de que insert_data es un procedure y que hay que usar «call». Mientras que esta

connection.prepareCall("{? = call add(?,?)}")

si funcionaba sin problemas. Así que tras mucho darle vueltas y googlear, me encuentro que lo de que el driver Java de postgreSQL haga caso a este tipo de sintaxis o no, depende de una variable escapeSyntaxCallMode, que puede tener tres valores

public enum EscapeSyntaxCallMode {
    SELECT("select"),
    CALL_IF_NO_RETURN("callIfNoReturn"),
    CALL("call");

Por defecto y compatibilidad hacia atrás está en SELECT, que NO funciona para las llamadas a PROCEDURES con CallableStatement. Hay que cambiarlo para su correcto funcionamiento a callIfNoReturn.

Así que la URL de conexión desde Java a través del driver quedaría así

"jdbc:postgresql://localhost/chuidiang-examples?escapeSyntaxCallMode=callIfNoReturn"

o bien usando las properties de conexión.

Todo facilidades.

Esta entrada ha sido publicada en java y etiquetada como , , . Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.