Camel -Spring SQLException при использовании готовых операторов
Использование 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>
Столкнувшись с той же проблемой, даже если я использую Camel-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: таблица или представление не существует
Примечание: нет проблем с подключением к базе данных и таблицей базы данных
3 ответа
В этом вопросе у кого-то была такая же ошибка. Он решает это путем изменения типа аргумента. Попробуйте проверить, если ваши аргументы в хороших типах. Попробуйте жестко закодировать все аргументы без одного, как вы пытаетесь, но измените не закодированный аргумент. Таким образом, вы можете определить, какой аргумент вызывает ошибку.
У меня тоже была такая же проблема, однако я нашел решение для нее.
sql:UPDATE myTable set key1=:#value1, key2=:#value2, key3=:#value3 where req1=CAST(:#reqValue1 as NCHAR(25))
Только в предложении where вы должны указать длину символов, указанную в запросе.
Дайте нам знать, если это решит и вашу проблему.
Другое: его работа у меня была та же проблема, и это решило ошибку
Мы столкнулись с той же проблемой с params. Наш сервер приложений был weblogic 12c. Странно, но понижение до 11g решило это.
Я надеюсь, что эта информация поможет вам!