PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich ein JSON-Objekt mit Java PreparedStatement in Postgres einfügen?

Dieses Verhalten ist ziemlich ärgerlich, da JSON-Strings problemlos akzeptiert werden, wenn sie als Literal-Strings in SQL-Befehlen verwendet werden.

Es gibt bereits ein Problem dafür im Postgres-Treiber-Github-Repository (auch wenn das Problem die serverseitige Verarbeitung zu sein scheint).

Neben der Verwendung eines Casts (siehe Antwort von @a_horse_with_no_name) im SQL-String bietet der Issue-Autor zwei weitere Lösungen an:

  1. Verwenden Sie einen Parameter stringtype=unspecified in der JDBC-Verbindungs-URL/Optionen.

Dies teilt PostgreSQL mit, dass alle Text- oder Varchar-Parameter tatsächlich von unbekanntem Typ sind, wodurch es ihre Typen freier ableiten kann.

  1. Wrappen Sie den Parameter in ein org.postgresql.util.PGobject :

 PGobject jsonObject = new PGobject();
 jsonObject.setType("json");
 jsonObject.setValue(yourJsonString);
 pstmt.setObject(11, jsonObject);