0

使用 Camel 2.13.1 和 Spring 2.7.11 并在尝试使用 sql 组件运行更新查询时收到 SQL 异常。下面是如何将我的更新查询添加到路由中,并且我正在使用正文中的 java.util.Map 将输入参数值传递给该语句。

主要问题:如果我在准备好的语句中只有一个输入参数,那么它工作正常.. 如果我在下面的更新查询中有多个,那么它会因 sql 异常而失败

<route id="ABC" >

   <from uri="direct:sqlInsert" />
   <process ref="sqlProcessor" />

   <to uri="sql:UPDATE myTable set key1=:#value1, key2=:#value2, key3=:#value3 where req1=:#reqValue1" />

</route>

即使我使用骆驼JDBC也面临同样的问题

<route id="ABC" >

      <from uri="direct:sqlInsert" />
      <process ref="sqlProcessor" />

      <setBody>
            <constant>UPDATE myTable set key1=:?value1, key2=:?value2, key3=:?value3 where req1=:?reqValue1</constant>
        </setBody>
        <to uri="jdbc:customDatasource?useHeadersAsParameters=true" />  

 </route>

这是我一直看到的 SQL 异常..

JMS 消息侦听器的执行失败。引起:[ org.apache.camel.RuntimeCamelException - org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在 ]: org.apache.camel.RuntimeCamelException: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法 []; 嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在

注意:数据库连接和数据库表没有问题

4

3 回答 3

0

我也有同样的问题,但是,我找到了解决方案。

sql:UPDATE myTable set key1=:#value1, key2=:#value2, key3=:#value3 where req1=CAST(:#reqValue1 as NCHAR(25))

仅在 where 子句中,确保提供查询中所见的字符长度。

让我们知道它是否也能解决您的问题。

其他:它的工作我有同样的问题,这解决了错误

于 2017-08-11T10:15:52.303 回答
0

我们在使用参数时遇到了同样的问题。我们的应用服务器是 weblogic 12c。奇怪,但降级到 11g 解决了这个问题。

我希望这些信息对你有帮助!

于 2016-04-04T13:56:40.427 回答
0

这个问题中,有人遇到了同样的错误。他通过改变参数类型来解决它。如果你的论点是好的类型,请尝试确认。尝试硬编码没有一个参数的所有参数,就像你尝试的那样,但更改不是硬编码的参数。这样您就可以确定哪个参数导致错误。

于 2015-10-13T09:56:39.410 回答