Maison >base de données >tutoriel mysql >Comment utiliser les opérateurs PostgreSQL JSONB (`?`, `?|`, `?&`, `/`) avec les instructions préparées JDBC ?

Comment utiliser les opérateurs PostgreSQL JSONB (`?`, `?|`, `?&`, `/`) avec les instructions préparées JDBC ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-24 03:18:15891parcourir

How to Use PostgreSQL JSONB Operators (`?`, `?|`, `?&`, `/`) with JDBC Prepared Statements?

Utilisation des opérateurs PostgreSQL JSON(B) avec des points d'interrogation ("?") dans JDBC

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.

Solution 1 : Déclarations statiques

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']")) {
     ...
}

Solution 2 : Substitution de fonctions

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn