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
Libérer: 2024-12-24 03:18:15
original
858 Les gens l'ont consulté

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']")) {
     ...
}
Copier après la connexion

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 = '?|';
Copier après la connexion

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()) {
     ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal