7
votes

Comment puis-je insérer un document XML dans PostgreSQL en Java?

J'ai une table dans PostgreSQL

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: syntax error at or near "bf48e000b0"


0 commentaires

4 Réponses :


2
votes

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.

mise à jour: strong> p>

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


3 commentaires

Peut-être que je fais quelque chose de mal mais system.out.println (xml_rreq.tostring ()); 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);


Vous pouvez rechercher sur Google pour convertir fichier -> document XML ou fichier -> introuvable -> chaîne pour plus d'aide.



8
votes

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> xxx pré>

Voir: http://wiki.postgresql.org/wiki/xml_support p>

update: strong> p>

code Java Exemple: p>

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));


9 commentaires

stmt.setstring (3, "xmlparse (" + xml_gkuzu.tostring () + ")"); 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 ( )'". Mais il doit être: "Insérer dans xml_docs (ID, gkuzu) ( 1, xmlparse (' ') ". (Citations)


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"


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"); . C'est correct?


Si vous utilisez Apache Commons Io, vous pouvez utiliser ceci: Link . Ou vous le faites comme ceci: lien


Pour la version 9.0 et le plus grand xmlparse ==> XML .


Pour clarifier le commentaire par Adam Gent, le moyen standard de produire une valeur de type xml à partir de données de caractères consiste à utiliser la fonction xmlparse ({document | contenu}) . Postgres ajoute ses propres syntaxes spécifiques postgre: xml ' bar ' et ' bar ' :: xml . Voir Doc .



3
votes

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> xxx pré>

Ceci devrait créer cette instruction: p>

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XML('<foo>Hello World!</foo>'));


0 commentaires

4
votes

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);


0 commentaires