Dit gedrag is behoorlijk vervelend omdat JSON-tekenreeksen zonder problemen worden geaccepteerd wanneer ze worden gebruikt als letterlijke tekenreeksen in SQL-opdrachten.
Er is hier al een probleem voor in de Github-repository van het postgres-stuurprogramma (zelfs als het probleem de verwerking aan de serverzijde lijkt te zijn).
Naast het gebruik van een cast (zie antwoord van@a_horse_with_no_name) in de sql-tekenreeks, biedt de auteur van het nummer twee aanvullende oplossingen:
- Gebruik een parameter
stringtype=unspecified
in de JDBC-verbindings-URL/opties.
Dit vertelt PostgreSQL dat alle tekst- of varchar-parameters eigenlijk van een onbekend type zijn, waardoor het hun typen vrijer kan afleiden.
- Verpak de parameter in een
org.postgresql.util.PGobject
:
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);