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)
您可以使用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)
我不确定,但试试这个:
首先将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)
归档时间: |
|
查看次数: |
11241 次 |
最近记录: |