gpt4 book ai didi

java - 为什么我使用 DB2 LUW 和 WebSphere App Server 得到 SQLCODE=-204, SQLSTATE=42704?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:07 27 4
gpt4 key购买 nike

有许多网页显示此消息作为症状(SQLERRMC 之后的值和不同的驱动程序级别):

DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65

包括几个hereStackOverflow .

错误代码表示未找到一个对象——几乎总是一个表,SQLERRMC 参数的值包含有问题的对象的名称。在我能找到的每一次其他情况下,解决方案只是他们需要用模式名称来限定表名。但是,正如您从上面的行中看到的那样,这里的情况并非如此。模式是M51Dev,表是CUSTOMER,两者都存在。

环境是在 Windows Server 2003 R2 上运行的 WebSphere Application Server(在这个特殊情况下是 7.0.0.31,但我不知何故怀疑它是否相关),在旧的 XP 机器上运行 DB2 9.7.300.3885。数据源在 WAS 中定义并通过 JNDI 检索。该应用程序是用 Java 编写的,我们的 SQL 是通过 Spring 的 JdbcTemplates 使用 JDBC 执行的。

WAS 中的数据源定义包括一个名为 currentSchema 的自定义属性,它被设置为 M51Dev

这是相关的 SQL 行(或其中之一,因为我们对每个表都有相同的症状):

SELECT rundateOverride  FROM customer WHERE customerId=1

这是堆栈跟踪的摘录。如果有帮助,我可以提供更多。

bad SQL grammar [SELECT rundateOverride  FROM customer WHERE customerId=1]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:406)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476)
at com.misys.meridian.runtime.userPromptable.SchedulerService.refreshMarketCentreSystemDates(SchedulerService.java:1539)
at com.misys.meridian.runtime.userPromptable.SchedulerService.performService(SchedulerService.java:270)
at com.misys.meridian.runtime.userPromptable.SchedulerService.prompt(SchedulerService.java:175)
at com.misys.meridian.runtime.userPromptable.GenericDelegate.process(GenericDelegate.java:95)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:333)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:223)
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:304)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
at org.apache.camel.processor.Pipeline.access$100(Pipeline.java:43)
at org.apache.camel.processor.Pipeline$1.done(Pipeline.java:135)
at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:56)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:450)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:906)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:929)
at java.lang.Thread.run(Thread.java:761)
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65
at com.ibm.db2.jcc.am.ed.a(ed.java:676)
at com.ibm.db2.jcc.am.ed.a(ed.java:60)
at com.ibm.db2.jcc.am.ed.a(ed.java:127)
at com.ibm.db2.jcc.am.gn.c(gn.java:2554)
at com.ibm.db2.jcc.am.gn.d(gn.java:2542)
at com.ibm.db2.jcc.am.gn.a(gn.java:2034)
at com.ibm.db2.jcc.t4.cb.g(cb.java:140)
at com.ibm.db2.jcc.t4.cb.a(cb.java:40)
at com.ibm.db2.jcc.t4.q.a(q.java:32)
at com.ibm.db2.jcc.t4.rb.i(rb.java:135)
at com.ibm.db2.jcc.am.gn.gb(gn.java:2005)
at com.ibm.db2.jcc.am.gn.a(gn.java:3023)
at com.ibm.db2.jcc.am.gn.a(gn.java:667)
at com.ibm.db2.jcc.am.gn.executeQuery(gn.java:651)
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeQuery(WSJdbcStatement.java:999)
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:440)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
... 40 more

正如一些背景:这是一个支持多种数据库平台的银行应用程序。我们有多年使用各种版本的 Oracle、MS SQL Server 和 DB2 for System i 的经验;但我们对使用 DB2 LUW 还比较陌生。不过,我的一些同事仍然可以使用上述配置,至少当他们在同一台机器上安装 WAS 和 DB2 时是这样。

而且我可以在装有 WAS 的机器上运行 SQL 客户端,并使用相同的参数连接到有问题的数据库并成功查询它,包括使用 SET SCHEMA M51Dev 并且不限定表名称,我认为它最接近模拟 JDBC/JNDI 环境。

最佳答案

答案是区分大小写。

这个答案其实是由mustaccio提供的在comment ,但他们似乎不想将其添加为答案。如果你看到这个,@mustaccio,请添加你自己的答案,这样我就可以接受。

无论如何,WAS 似乎可以有效地为您在“自定义属性”部分中指定的值加上引号。我为 currentSchema 属性输入了 M51Dev,它被作为 “M51Dev” 发送到 DB2。但是 DB2 将模式名称存储为 M51DEV 它当然将这些视为两个不同的值..

为属性值指定 M51DEV 解决了这个问题。

关于java - 为什么我使用 DB2 LUW 和 WebSphere App Server 得到 SQLCODE=-204, SQLSTATE=42704?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com