7

我在 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
)

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

更新

好的。我试试

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

并获得例外

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.

怎么了?

更新 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()+"))";

我得到例外

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

4 回答 4

8

我不确定,但试试这个:

首先将您的 XML 转换为 Java 字符串。然后创建一个插入语句并使用 PostgreSQL 的 XMLPARSE 方法将您的值转换为 PostgreSQL 的 xml 类型:

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

请参阅: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>");

这应该创建以下语句:

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));
于 2012-08-21T08:53:06.253 回答
4

您可以使用JDBC 4 SQLXML代替使用 PostgreSQL 专有语法重写插入语句:

String xml = xml_gkuzu.toString();

SQLXML sqlxml = connection.createSQLXML();
sqlxml.setString(xml);
stmt.setSQLXML(3, sqlxml);
于 2014-11-25T15:45:42.567 回答
3

如果您没有使用 libxml 支持构建的 Postgres,则更新已接受的答案:

Java 代码示例:

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

这应该创建以下语句:

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

因此,对于 9.0 及更高版本,您可能需要切换XMLPARSE==> XML。否则,您将需要特殊支持XMLPARSE

来自 Postgres 文档

此处不再重复用于与 xml 类型相互转换的类函数表达式 xmlparse 和 xmlserialize。使用这些功能中的大多数需要使用 configure --with-libxml 构建安装。

于 2013-03-25T13:14:22.840 回答
2

虽然 postgres 有 native XML Data type,但从 java 端,你可以处理纯字符串。
您可以将您的 xml 文档转换为字符串并插入,它应该可以工作。

更新:

查看您的错误后,您需要通过驱动程序 URL 将一个附加变量传递给服务器。

jdbc:postgresql://localhost/test?stringtype=unspecified
or
jdbc:postgresql://localhost/test?user=user&password=pass&stringtype=unspecified

额外的参数stringtype=unspecified将删除输入字符串的类型检查。

于 2012-08-21T08:41:12.233 回答