Warum bekomme ich SQLCODE=-204, SQLSTATE=42704 mit DB2 LUW und WebSphere App Server?

Gibt es zahlreiche Webseiten, auf denen Menschen zeigen, die diese Nachricht als ein symptom (mit dem Wert nach SQLERRMC und der Fahrer level unterschiedliche):

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

darunter mehrere hier auf StackOverflow.

Die Fehler codes bedeuten, dass ein Objekt-fast immer eine Tabelle -- nicht gefunden, und der Wert der SQLERRMC parameter enthält den Namen des Objekts in Frage. In jedem anderen auftreten dieses ich finden kann, die Lösung war einfach nur, dass Sie notwendig sind, um sich der name der Tabelle mit dem schema-Namen. Jedoch, wie Sie sehen können aus die Linie vor, das ist nicht der Fall hier. Das schema ist M51Dev, und die Tabelle ist CUSTOMER, und beide existieren.

Umwelt WebSphere Application Server (7.0.0.31 in diesem speziellen Fall, aber ich habe irgendwie Zweifel das relevant ist) unter Windows Server 2003 R2, DB2 9.7.300.3885 auf einem alten XP-Rechner. Die datasource definiert WURDE und abgerufen werden, über JNDI. die Anwendung ist in Java geschrieben, und unsere SQL ausgeführt wird, mithilfe von JDBC über Spring JdbcTemplates.

Die datasource-definition WURDE enthält eine benutzerdefinierte Eigenschaft namens currentSchema, die M51Dev.

Dies ist die relevante Zeile der SQL - (oder einer von Ihnen, wie bekommen wir das gleiche symptom, für jede Tabelle):

SELECT rundateOverride  FROM customer WHERE customerId=1

Und hier ist ein Auszug aus dem stack-trace. Ich kann mehr zur Verfügung stellen wenn es hilft.

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

Nur als etwas hintergrund: dies ist eine banking-Anwendung unterstützt mehrere Datenbank-Plattformen. Wir haben Jahre Erfahrung mit verschiedenen Versionen von Oracle, MS SQL Server und DB2 für System i -; aber wir sind relativ neu in der Verwendung von DB2 LUW. Noch einige meiner Kollegen haben die obige Konfiguration funktioniert, zumindest wenn Sie haben WAR und DB2 auf derselben Maschine.

Und ich kann einen SQL-client auf der Maschine WAR, und die Verbindung zu der Datenbank in Frage, die mit den gleichen Parametern und Abfragen erfolgreich, einschließlich der Verwendung von SET SCHEMA M51Dev und nicht qualifizierte Tabellennamen, die ich denke, die meisten eng emuliert die JDBC/JNDI-Umgebung.

  • Sieht aus wie der application server nutzt einen Bezeichner in Anführungszeichen, wenn die Einstellung schema: etwas entlang der Linien von set schema "M51Dev" im Gegensatz zu set schema M51Dev. Sehen Sie, wenn die Versorgung der schema-name in Großbuchstaben hilft.
  • Das klingt glaubwürdig, denn wenn Sie es nicht verwenden "'s, dann DB2 rollt sich automatisch alle Bezeichner in Großbuchstaben.
  • Danke. Ich werde versuchen, dass wenn ich wieder bei der Arbeit morgen. Ich werde überrascht sein, wenn es funktioniert. Etwas peinlich, auch, obwohl.
  • Das war es! Oh je, ich hätte das versucht. @mustaccio, möchten Sie es als Antwort, und ich werde es akzeptieren?
Schreibe einen Kommentar