【问题标题】:SQLException while invoking MobileFirst SQLAdapter调用 MobileFirst SQLAdapter 时出现 SQLException
【发布时间】:2015-09-21 05:36:09
【问题描述】:

我收到此错误:

FWLSE0101E:原因:[project ***]com.ibm.db2.jcc.am.SqlException:DB2 SQL 错误:SQLCODE=-313,SQLSTATE=07004,SQLERRMC=null,DRIVER=3.66.46 java。 lang.RuntimeException:DB2 SQL 错误:SQLCODE=-313,SQLSTATE=07004,SQLERRMC=null,DRIVER=3.66.46。 执行查询: update account set regTstamp = (current timestamp) where accountId = ?

在调用 SQLAdapter 时。
这是调用过程:

var AcceptTocInvokeData = {
    adapter : 'DataAdapter',
    procedure : 'updateAcceptTocDate',
    params: [accountId]
};

WL.Client.invokeProcedure(AcceptTocInvokeData, {
    onSuccess: function(resp) {
        deferred.resolve(resp);
    },
    onFailure: function(resp) {
        deferred.reject(resp);
    }
});

和 SQLAdapter 代码:

var prepStmt = WL.Server.createSQLStatement("update account set regTstamp = (current timestamp) where accountId = ?");

function updateAcceptTocDate(accountId) {       
    return WL.Server.invokeSQLStatement({
        preparedStatement: prepStmt,
        parameters: [accountId]
    });
}

如果我从 MobileFirst Studio(运行方式...)调用适配器,它可以完美运行。 有人知道怎么回事吗?

【问题讨论】:

  • 您在客户端遇到了什么错误,例如您在 Chrome 开发工具中看到了什么?
  • 几乎相同的错误消息:Procedure invocation error. Runtime: DB2 SQL Error: SQLCODE=-313, SQLSTATE=07004, SQLERRMC=null, DRIVER=3.66.46. Performed query: update account set regTstamp = (current timestamp) where accountId = ?.

标签: db2 sqlexception ibm-mobilefirst mobilefirst-adapters


【解决方案1】:

我自己找到了解决方案:
我在invokeData中写的是params而不是parameters

【讨论】:

    【解决方案2】:

    如果您查看 DB2 手册中的 SQLCODE -313,您可能会看到如下内容:

    参数化游标的 EXECUTE 语句中的变量数、OPEN 语句中的变量数或 OPEN 语句中的参数数不等于所需的值数。

    显然,参数没有绑定到prepared statement。

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多