Maison >base de données >tutoriel mysql >Comment utiliser les opérateurs JSON(B) de PostgreSQL avec '?' dans JDBC ?
PostgreSQL propose des opérateurs JSON uniques qui incluent un caractère de point d'interrogation dans leurs noms, comme ? pour l'existence de la clé et ?| pour l'existence d'une chaîne de tableau. Cependant, le PostgreSQL officiel. Le pilote JDBC rencontre des difficultés à analyser les chaînes SQL contenant ces opérateurs, les interprétant par erreur comme des variables de liaison JDBC.
Pour les utiliser avec succès opérateurs dans JDBC, considérez ce qui suit solutions de contournement :
Cette solution de contournement de base élimine l'utilisation d'instructions préparées, permettant ainsi à la chaîne SQL d'être exécutée en tant qu'instruction statique. sacrifie les avantages des déclarations préparées.
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
Les opérateurs sont essentiellement des alias syntaxiques pour les fonctions de support dans le pg_catalog L'identification du nom de la fonction vous permet de l'utiliser directement. Par exemple :
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
Cela donne le résultat suivant :
oprname function ---------------------------------------------------------------------------------- ?| point_vert(point, point) ?| lseg_vertical(-, lseg) ?| line_vertical(-, line) ?| jsonb_exists_any(jsonb, text[]) <--- this is the one we're looking for ?| exists_any(hstore, text[])
La solution de contournement consiste à remplacer l'opérateur par sa fonction correspondante :
try (PreparedStatement s = c.prepareStatement( "select jsonb_exists_any('{}'::jsonb, array['a', 'b']"); ResultSet rs = s.executeQuery()) { ... }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!