J'ai une table dans PostgreSQL
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: syntax error at or near "bf48e000b0"
4 Réponses :
Bien que Postgres ait le type de données code> xml code>, de l'extrémité Java, vous pouvez gérer avec des chaînes simples.
Vous pouvez convertir votre document XML en chaîne et insérer, cela devrait fonctionner.
Après avoir examiné votre erreur, vous devez transmettre une variable supplémentaire au serveur via URL du pilote. P> jdbc:postgresql://localhost/test?stringtype=unspecified
or
jdbc:postgresql://localhost/test?user=user&password=pass&stringtype=unspecified
Peut-être que je fais quelque chose de mal mais system.out.println (xml_rreq.tostring ()); code> donner nom de fichier. Comment prendre le document XML du fichier?
fichier de fichier = nouveau fichier ("c: \\ yourfile.xml"); DocumentBuilderFactory DBF = DocumentBuilderFactory.NewInstance (); DocumTBuilder dB = dbf.newdocumentbuilder (); Document doc = db.parse (fichier); code>
Vous pouvez rechercher sur Google pour convertir fichier -> document XML code> ou
fichier -> introuvable -> chaîne code> pour plus d'aide.
Je ne suis pas sûr, mais essayez ceci:
Convertissez d'abord votre XML en une chaîne Java.
Ensuite, créez un énoncé d'insertion et utilisez la méthode XMLPARSE de PostgreSQL pour convertir votre valeur au type XML de PostgreSQL: p> Voir: update: strong> p> code Java Exemple: p> INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));
stmt.setstring (3, "xmlparse (" + xml_gkuzu.tostring () + ")"); code> Cette construction donne la même exception.
Si vous utilisez "STMT.SETSTRING ()", votre deuxième paramètre sera inséré sous la forme d'une valeur de varchar. Votre déclaration ressemble alors à ceci: «Insérez dans les valeurs xml_docs (id, gkuzu) (1, 'xmlparse (
Maintenant, je fais comme dans votre exemple mais obtenir une exemption. Regardez la mise à jour 2 s'il vous plaît.
Après avoir essayé du code de votre mise à jour, je reçois une exception exception dans le thread "principale" org.postgresql.util.psqxception: erreur: erreur de syntaxe à ou proche "$ 3" code>
N'importe où dans votre relevé SQL final doit être "3 $". Mais je ne sais pas où. Contient votre chaîne XML "3 $"?
Non ils n'ont pas fait. Je pense que je travaille avec XML mal. Je fais ce fichier xml_rreq = nouveau fichier ("rreq_ceec91b1-f15b-49e5-ae4c-72bf48e000b0.xml"); code>. C'est correct?
Si vous utilisez Apache Commons Io, vous pouvez utiliser ceci:
Pour la version 9.0 et le plus grand xmlparse code> ==>
XML code>.
Pour clarifier le commentaire par Adam Gent, le moyen standard de produire une valeur de type xml code> à partir de données de caractères consiste à utiliser la fonction
xmlparse ({document | contenu}) code>. Postgres ajoute ses propres syntaxes spécifiques postgre:
xml '
'
Une mise à jour du réponse acceptée Si vous n'avez pas de postgres construit avec la prise en charge de la libxml:
Exemple de code Java : p> Ceci devrait créer cette instruction: p> INSERT INTO xml_docs(id, gkuzu) VALUES (1, XML('<foo>Hello World!</foo>'));
au lieu de réécrire l'instruction insertion à l'aide de la syntaxe postgretsql-exclusive, vous pouvez utiliser JDBC 4 SQLXML :
String xml = xml_gkuzu.toString(); SQLXML sqlxml = connection.createSQLXML(); sqlxml.setString(xml); stmt.setSQLXML(3, sqlxml);