Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中的PostgreSQL中插入XML文档?_Java_Xml_Postgresql_Jdbc - Fatal编程技术网

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

如何在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

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

虽然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文档
文件->输入流->字符串
以获取更多帮助。