PostgreSQL propose divers opérateurs, notamment ?/?|/ et ?&, qui facilitent la gestion JSON. Cependant, le pilote JDBC PostgreSQL rencontre des difficultés pour analyser les chaînes SQL contenant ces opérateurs. Cet article explore deux solutions de contournement pour utiliser ces opérateurs dans JDBC.
Une approche consiste à utiliser des instructions statiques au lieu d'instructions préparées. Bien que cette méthode élimine les avantages des instructions préparées, elle gère efficacement les opérateurs.
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
Les opérateurs sont de simples constructions syntaxiques qui correspondent aux fonctions du pg_catalog. En identifiant ces fonctions, vous pouvez les appeler directement sans utiliser d'opérateurs. Cette méthode peut avoir un impact sur l'efficacité de l'indexation.
Pour trouver la fonction correspondante, exécutez la requête SQL suivante :
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
La fonction résultante, "jsonb_exists_any(jsonb, text[])", peut être utilisé dans les déclarations préparées :
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!