使用Worklight 6.1.0触发选择查询时获取DB2 SQL错误?

时间:2014-07-22 06:12:24

标签: db2 ibm-mobilefirst worklight-adapters db2-connect

我正在尝试使用worklight 6.1.0连接到本地LAN中的DB2,然后触发Select Query以查找数据(如果存在)。但我得到以下错误:

{
       "errors": [
          "Runtime: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DATABASE_NAME.REGISTRATION, DRIVER=3.58.82.\nPerformed query:\nSELECT * FROM DATABASE_NAME.registration where DATABASE_NAME.registration.Mob_No = ?"
       ],
       "info": [
       ],
       "isSuccessful": false,
       "warnings": [
       ]
    }

我的SQL适配器配置如下所示:

<connectionPolicy xsi:type="sql:SQLConnectionPolicy">
            <!-- Example for using a JNDI data source, replace with actual data source name -->
            <!-- <dataSourceJNDIName>java:/data-source-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://172.21.11.129:50000/MOBILEDB</url>
                <user>db2admin</user>
                <password>Newuser123</password>
            </dataSourceDefinition>
        </connectionPolicy>

具有程序的js文件如下:

var selectStatement1 = "SELECT * FROM DATABASE_NAME.registration where DATABASE_NAME.registration.Mob_No = ?";
var procStmt1 = WL.Server.createSQLStatement(selectStatement1);

function registrationLookup(mobile){

WL.Logger.debug("Inside registrationLookup");

return WL.Server.invokeSQLStatement(
        {
            preparedStatement : procStmt1,
            parameters : [mobile]
        }
);
}

我做了一些关于将DB2与Worklight连接起来的研究,并且知道我需要将下面的数据放在worklight.properties文件中。

wl.db.username=db2admin
wl.db.type=DB2
wl.db.password=Newuser123
wl.db.driver=com.ibm.db2.jcc.DB2Driver

但是在添加它之后,我无法部署适配器并且错误说“db2admin&#39;不存在。所以我在当前问题的背景下跳过了这一步。但是在经历了我没有添加这个worklight.properties数据的错误之后,在我看来,对象并不存在&#39;根据 http://www-01.ibm.com/support/docview.wss?uid=swg21613531 或用户表不存在。任何建议都会有所帮助。 注意:

  1. 我的IP地址是172.21.11.125,我在这里调用Adapter for DB2。
  2. DB2实例正在172.21.11.129 @ 50000上运行。
  3. 已添加db2jcc_license_cu_9.5.jar&amp; server / lib中的db2jcc_9.5.jar。它的名字附加了&#39; _9.5&#39;我已从两个jar中删除并仅保留db2jcc_license_cu.jar和db2jcc.jar。

2 个答案:

答案 0 :(得分:1)

错误消息是您的SQL语句无效,因此我推断您与DB的连接正常。

要诊断它,首先使用DB2命令行或其他工具运行SQL。我的猜测是你的意思

  LARSEN.registration

而您正在说DATABASE_NAME.registration

答案 1 :(得分:0)

得到自己的问题及其真正有趣的问题。感谢https://stackoverflow.com/users/2260967/glen-misquith [Glen Misquith]

问题出在SQL查询框架上,这与我用MYSQL做的不同。

适配器的Java脚本文件:

var selectStatement4 = "UPDATE \"LARSEN\".\"registration\" SET \"LARSEN\".\"registration\".\"Pass\"=?, \"LARSEN\".\"registration\".\"Re_Pass\"=? WHERE \"User_Name\" = ?";
var procStmt5 = WL.Server.createSQLStatement(selectStatement4);

function updatePassword(username,pass,repass){

WL.Logger.debug("Inside updatePassword "+username+" "+pass+" "+repass);

return WL.Server.invokeSQLStatement(
        {
            preparedStatement : procStmt5,
            parameters : [pass,repass,username]
        }
);
}

这是一个奇怪的事情在准备它时需要在SQL语句中使用斜杠。 我真的想了解DB2的这种行为。而且我也不能直接写'从架构名列表中选择* '并精确写出需要获取数据的列名。