1

我正在尝试使用 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”不存在。所以我在当前问题的背景下跳过了这一步。但是在经历了我没有添加这个 worklight.properties 数据的错误之后,在我看来,根据http://www-01.ibm.com/support/docview.wss?uid= '对象不存在' swg21613531或用户表不存在。任何建议都会有所帮助。 笔记:

  1. 我的 IP 地址是 172.21.11.125,我从那里为 DB2 调用适配器。
  2. DB2 实例在 172.21.11.129 @ 50000 上运行。
  3. 已经在 server/lib 中添加了 db2jcc_license_cu_9.5.jar 和 db2jcc_9.5.jar。它的名称附加了“_9.5”,我已经从两个 jar 中删除了它,只保留了 db2jcc_license_cu.jar 和 db2jcc.jar。
4

2 回答 2

1

错误消息是说您的 SQL 语句无效,因此我推断您与数据库的连接很好。

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

  LARSEN.registration

而你说的是 DATABASE_NAME.registration

于 2014-07-22T07:58:12.317 回答
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 语句时需要在 SQL 语句中使用斜杠。我真的很想了解 DB2 的这种行为。而且我也不能直接写' Select * from schema.table_name '并精确地写出需要从中获取数据的列名。

于 2014-07-24T06:03:39.127 回答