DB2异常:无法创建PoolableConnectionFactory SQLCODE = -142,

时间:2015-01-06 01:58:45

标签: db2 ibm-mobilefirst mobilefirst-adapters

我在MobileFirst Platform 6.3中一直遇到以下错误:

  

运行时:org.apache.commons.dbcp.SQLNestedException:无法创建   PoolableConnectionFactory(DB2 SQL错误:SQLCODE = -142,   SQLSTATE = 42612,SQLERRMC = null,DRIVER = 4.19.26)

这是我的适配器代码:

     var test2 = WL.Server.createSQLStatement("SELECT * FROM WSDIWC.WBPTRR1");

     function getCEID(cnum) {   
        return WL.Server.invokeSQLStatement({
            preparedStatement : test2,
            parameters : []
        });
     }

适配器XML:

     <connectivity>
        <connectionPolicy xsi:type="sql:SQLConnectionPolicy">
        <!-- Example for using a JNDI data source, replace with actual data source 
            name -->
        <!-- <dataSourceJNDIName>${training-jndi-name}</dataSourceJNDIName> -->

        <!-- Example for using MySQL connector, do not forget to put the MySQL 
            connector library in the project's lib folder -->
         <dataSourceDefinition>
              <driverClass>com.ibm.db2.jcc.DB2Driver</driverClass>
               <url>jdbc:db2://***</url>
               <user>**</user>
                <password>**</password>
            </dataSourceDefinition>
        </connectionPolicy>
    </connectivity>

我删除了网址,用户和密码。 希望你能帮助我澄清当前的问题。

我已经知道sql不被接受,因为它只是一个简单的查询 我还研究了z / OS DB2,它有相同的错误代码sqlcode = -142。 http://answers.splunk.com/answers/117024/splunk-db-connect-db2.html

2 个答案:

答案 0 :(得分:0)

虽然您说这是一个“简单查询”,the exception error code mentions the following

  

-142
  SQL语句不受支持

     

解释

     

检测到数据库不支持的SQL语句。   该语句可能对其他IBM®关系数据库有效   产品或它可能在另一种情况下有效。例如,   可以使用VALUES和SIGNAL或RESIGNAL SQLSTATE等语句   仅在某些上下文中,例如在触发器主体或SQL中   过程

     

系统操作
  该声明无法处理。

     

程序员回复
  更改SQL语句的语法或从中删除语句   该计划。

您应该查看DB2 SQL指南,了解如何实现您想要实现的目标,并在问题中解释您是否需要进一步的帮助。例如,您确定“WSDIWC.WBPTRR1”实际可用吗?

答案 1 :(得分:0)

我在MobileFirst 6.3中与大型机DB2的JDBC连接遇到了同样的问题。与DB2 LUW的连接工作正常。看来默认池validationQuery对DB2 LUW有效,但对DB2 z / OS无效。

您可以通过在Liberty配置文件server.xml中执行数据源配置来解决此问题。从Eclipse Servers 视图中,展开 MobileFirst Development Server 并编辑服务器配置。在那里添加驱动程序和数据源;例如:

 <library id="db2jcc">
    <fileset dir="whereever" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/>
 </library>
 <dataSource id="db2" jndiName="jdbc/db2">
    <jdbcDriver libraryRef="db2jcc"/>
    <properties.db2.jcc databaseName="mydb" portNumber="5021" 
        serverName="myserver" user="myuser" password="mypw" />
 </dataSource>

然后在connectionPolicy下的适配器XML中引用它:

 <dataSourceJNDIName>jdbc/db2</dataSourceJNDIName> 

在server.xml中配置数据源(与适配器XML相比)的好处是您可以访问所有数据源,JDBC和JCC属性。因此,如果连接池为您提供其他问题,您可以自定义它或切换到其他数据源类型,例如type="javax.sql.DataSource"