Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
具有Postgresql xml类型的QueryDSL/Talend JDBC:SQL插入或更新时更改的xml(算术计算) 大家好,_Xml_Postgresql_Jdbc_Xml Parsing_Querydsl - Fatal编程技术网

具有Postgresql xml类型的QueryDSL/Talend JDBC:SQL插入或更新时更改的xml(算术计算) 大家好,

具有Postgresql xml类型的QueryDSL/Talend JDBC:SQL插入或更新时更改的xml(算术计算) 大家好,,xml,postgresql,jdbc,xml-parsing,querydsl,Xml,Postgresql,Jdbc,Xml Parsing,Querydsl,我被一个特别烦人的问题缠住了。它依赖于通过JDBC将xml内容插入或更新到Postgresql xml类型字段中 上下文 下表的结构如下: CREATE TABLE articles ( article_id integer NOT NULL, article_xml xml NOT NULL ); 我使用QueryDSL库在应用程序中构建SQL查询,但初始数据来自OpenLink Virtuoso服务器,该服务器已使用Talend进行迁移,因此基于JDBC的事务也是如此 示例

我被一个特别烦人的问题缠住了。它依赖于通过JDBC将xml内容插入或更新到Postgresql xml类型字段中

上下文 下表的结构如下:

CREATE TABLE articles (
    article_id integer NOT NULL,
    article_xml xml NOT NULL
);
我使用QueryDSL库在应用程序中构建SQL查询,但初始数据来自OpenLink Virtuoso服务器,该服务器已使用Talend进行迁移,因此基于JDBC的事务也是如此

示例XML是:

<?xml version="1.0" encoding="UTF-8" ?>
<ArticleSimple>
    <id>22754</id>
    <departement>64 / 56</departement>
</ArticleSimple>
update "Shared"."articles"
set "article_xml" = xml '[xml value]',
where "articles"."article_id" = 22754
我还尝试了其他synthaxes来获取XML值,但没有成功解决我的问题:

no expression at all just the xml value 
XMLPARSE (DOCUMENT '[xml value]')
XMLPARSE (CONTENT '[xml value]')
'[xml value]'::xml
此外,所有这些synthaxes都在phpPgAdmin或PgAdmin中工作

在java中,示例QueryDSL UpdateClause:

SQLUpdateClause clause = buildUpdate(connection, articles)
            .where(articles.articleId.eq(articleID))
            .set(articles.articleXml, xml([xml value]));
其中xml函数定义如下:

protected static StringExpression xml(String xml)
{
    return StringTemplate.create("xml {0}", xml);
}
我使用的JDBC驱动程序版本是:postgresql-9.1-903.jdbc4

问题 首先也是最重要的一点,当我直接在phpPgAdmin或PgAdmin中执行查询时,不会发生任何问题,因为问题必须出现在另一层,可能是JDBC

在某种程度上,xml会根据提供的示例进行更改并转换为该输出:

 <?xml version="1.0" encoding="UTF-8" ?>
 <ArticleSimple>
      <id>22754</id>
      <departement>1,142857142857143</departement>
 </ArticleSimple>
对于QueryDSL,我可以说在SqlUpdateCase构造之前,xml输入没有改变,之后当我为SqlUpdateCase打印SQL时,xml值会改变:

update "Shared"."articles"
set "article_xml" = xml '<ArticleSimple><id>22754</id><departement>1,142857142857143</departement></ArticleSimple>'
where "articles"."article_id" = 22754
问题 我想知道是否有人已经遇到了类似的问题并找到了转机,或者是否有人有任何线索


提前感谢那些将阅读我的帖子并提出任何建议或解决方案的人

因此,您的查询生成器在进入PostgreSQL之前就已经损坏了SQL。您是否在准备语句中使用位置参数?对于talend,情况是这样的,它是隐式的,但据我所知,它在准备语句中使用位置参数。对于QueryDsl,我不知道底层流程,但它基于JBDC,所以我也会说是。您是如何打印QueryDsl查询的?对于SQLInsertClause和SQLUpdateClause,我使用toString方法,因为我没有找到任何类似于getSQL…getSQL的东西,可用于SQLQuery。我错了吗?
update "Shared"."articles"
set "article_xml" = xml '<ArticleSimple><id>22754</id><departement>1,142857142857143</departement></ArticleSimple>'
where "articles"."article_id" = 22754