Maison > base de données > tutoriel mysql > Comment gérer les opérateurs PostgreSQL JSON(B) avec des points d'interrogation à l'aide de JDBC ?

Comment gérer les opérateurs PostgreSQL JSON(B) avec des points d'interrogation à l'aide de JDBC ?

Linda Hamilton
Libérer: 2024-12-22 18:52:10
original
961 Les gens l'ont consulté

How to Handle PostgreSQL JSON(B) Operators with Question Marks Using JDBC?

Gestion des opérateurs PostgreSQL JSON(B) avec le caractère de point d'interrogation via JDBC

PostgreSQL utilise des opérateurs ASCII-art contenant le caractère de point d'interrogation "" ? pour les opérations JSON. Cependant, le pilote JDBC officiel de PostgreSQL interprète ces points d'interrogation comme des variables de liaison JDBC ordinaires, ce qui entraîne des erreurs lors de l'utilisation de eux.

Solutions de contournement

Pour utiliser ces opérateurs via JDBC, deux solutions de contournement sont applicables :

Déclarations statiques :

Utiliser des instructions statiques instructions au lieu des instructions préparées. Cette approche simplifie l'utilisation mais élimine les avantages des instructions préparées, notamment les gains de performances et l'injection SQL. protection.

try (Statement s = c.createStatement();
     ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) {
     ...
}
Copier après la connexion

Approche basée sur les fonctions :

Évitez les opérateurs en utilisant les fonctions sous-jacentes disponibles dans pg_catalog pour identifier le nom de fonction associé à un opérateur spécifique. , 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

Pour l'opérateur "?|"", ceci donne :

oprname  function
----------------------------------------------------------------------------------
?|       jsonb_exists_any(jsonb, text[])
Copier après la connexion

Remplacez l'opérateur par la fonction correspondante dans l'instruction JDBC :

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