如何在Java中的PostgreSQL中插入XML文档?
我在Postgresql中有一个表如何在Java中的PostgreSQL中插入XML文档?,java,xml,postgresql,jdbc,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 ) 我使用JDBC进行数据库连接。我想在表中插入整个xml文档。 我怎么做这个 更新 好的。我试着 String sql = "I
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"
虽然postgres有原生的
XML数据类型,但从java端,您可以处理普通字符串。
您可以将xml文档转换为字符串并插入,它应该可以工作
更新:
查看错误后,需要通过驱动程序URL向服务器传递一个附加变量
jdbc:postgresql://localhost/test?stringtype=unspecified
or
jdbc:postgresql://localhost/test?user=user&password=pass&stringtype=unspecified
额外参数stringtype=unspecified
将删除输入字符串的类型检查 我不确定,但试试这个:
首先将XML转换为Java字符串。
然后创建insert语句并使用PostgreSQL的XMLPARSE方法将值转换为PostgreSQL的xml类型:
INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo><bar>Hello</bar></foo>'));
插入xml_文档(id,gkuzu)值(1,XMLPARSE('Hello');
见:
更新:
Java代码示例:
String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XMLPARSE(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");
String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XML(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");
String sql=“插入xml_文档(id,gkuzu)值(?,XMLPARSE(?)”;
[...]
stmt.setString(2,“你好,世界!”);
这将创建以下语句:
INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));
INSERT INTO xml_docs(id, gkuzu) VALUES (1, XML('<foo>Hello World!</foo>'));
INSERT-INTO-xml_-docs(id,gkuzu)值(1,XMLPARSE('Hello-World!'));
如果没有使用libxml支持构建Postgres,则更新:
Java代码示例:
String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XMLPARSE(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");
String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XML(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");
String sql=“插入xml_文档(id,gkuzu)值(?,xml(?)”;
[...]
stmt.setString(2,“你好,世界!”);
这将创建以下语句:
INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));
INSERT INTO xml_docs(id, gkuzu) VALUES (1, XML('<foo>Hello World!</foo>'));
INSERT-INTO-xml_-docs(id,gkuzu)值(1,xml('Hello-World!'));
因此,对于9.0及更高版本,您可能需要切换XMLPARSE
==>XML
。否则,您将需要对XMLPARSE
:
这里不重复用于转换类型xml和从类型xml转换的类似于表达式xmlparse和xmlserialize的函数。使用这些函数中的大多数都需要使用configure-with-libxml构建安装
与使用PostgreSQL专有语法重写insert语句不同,您可以使用:
stmt.setString(3,“XMLPARSE(“+xmlgkuzu.toString()+”)代码>此构造提供相同的执行。如果使用“stmt.setString()”,则第二个参数将作为varchar值插入。您的语句如下所示:“插入xml文档(id,gkuzu)值(1,'XMLPARSE()”。但它必须是:“插入xml文档(id,gkuzu)值(1,XMLPARSE(“”)”。(引号)现在我与您的示例类似,但得到了exeption。请看UPADATE 2。尝试更新代码后,我在线程“main”中得到exeption异常org.postgresql.util.PSQLException:错误:语法错误在“$3”处或附近
为了澄清Adam Gent的评论,从字符数据生成xml
类型的值的标准方法是使用函数XMLPARSE({DOCUMENT | CONTENT}value)
.Postgres添加了自己的Postgres特定语法:xml'bar'
和'bar':xml
。也许我做错了什么,但是System.out.println(xml\u rreq.toString());
给出文件名。如何从文件中提取xml文档?文件=新文件(“c:\\yourfile.xml”);DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();DocumentBuilder db=dbf.newDocumentBuilder();Document doc=db.parse(file);
您可以在google上搜索如何转换文件->xml文档
或文件->输入流->字符串
以获取更多帮助。