如何在Java中的PostgreSQL中插入XML文档?

Kli*_*Max 6 java xml postgresql jdbc

我在Postgresql中有一个表

DROP TABLE xml_docs;
CREATE TABLE xml_docs(
id serial PRIMARY KEY,
cad_number character(50),
gkuzu_name character(50),
gkuzu xml,
rreq_name character(50),
rreq xml
)
Run Code Online (Sandbox Code Playgroud)

我使用JDBC进行数据库连接.我想在表中插入整个xml文档.
我该怎么做?

UPDATE

好.我试试

  String sql = "INSERT INTO xml_docs(cad_number,gkuzu_name,gkuzu,rreq_name,rreq) VALUES(?,?,?,?,?)";
  PreparedStatement stmt = ce.prepareStatement(sql);
  stmt.setString(1, "11:33:5464563");
  stmt.setString(2, xml_gkuzu.getName());
  stmt.setString(3, xml_gkuzu.toString());
  stmt.setString(4, xml_rreq.getName());
  stmt.setString(5, xml_rreq.toString());
  stmt.executeQuery();
ce.close();
  se.close();
Run Code Online (Sandbox Code Playgroud)

得到了解释

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "gkuzu" is of type xml but expression is of type character varying
?????????: You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)

怎么了?

更新2

当我尝试这样做

 String sql1 = "INSERT INTO xml_docs(cad_number,gkuzu_name,gkuzu,rreq_name,rreq) VALUES(11335464563,"+xml_gkuzu.getName()+",XMLPARSE("+xml_gkuzu.toString()+"),"+xml_rreq.getName()+",XMLPARSE("+xml_rreq.toString()+"))";
Run Code Online (Sandbox Code Playgroud)

我得到了解释

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: syntax error at or near "bf48e000b0"
Run Code Online (Sandbox Code Playgroud)

Ale*_*øld 8

您可以使用JDBC 4 SQLXML,而不是使用 PostgreSQL 专有语法重写插入语句:

String xml = xml_gkuzu.toString();

SQLXML sqlxml = connection.createSQLXML();
sqlxml.setString(xml);
stmt.setSQLXML(3, sqlxml);
Run Code Online (Sandbox Code Playgroud)


use*_*528 7

我不确定,但试试这个:

首先将XML转换为Java String.然后创建一个insert语句并使用PostgreSQL的XMLPARSE方法将您的值转换为PostgreSQL的xml类型:

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo><bar>Hello</bar></foo>'));
Run Code Online (Sandbox Code Playgroud)

请参阅:http://wiki.postgresql.org/wiki/XML_Support

更新:

Java代码示例:

String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XMLPARSE(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");
Run Code Online (Sandbox Code Playgroud)

这应该创建这个声明:

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