IBM MobileFirst 中的 SQL 适配器调用失败

Posted

技术标签:

【中文标题】IBM MobileFirst 中的 SQL 适配器调用失败【英文标题】:SQL Adapter Invocation failure in IBM MobileFirst 【发布时间】:2015-04-22 14:21:51 【问题描述】:

我正在尝试使用 IBM mobilefirst 平台中的 SQL 适配器将数据插入数据库,但是我的代码到达了失败函数...

main.js:

function insertData()

  alert("Function InsertData called");
  var fname = document.forms["form1"]["fname"].value.toString();
  var lname = document.forms["form1"]["lname"].value.toString();
  var email = document.forms["form1"]["email"].value.toString();
  var pwd = document.forms["form1"]["pwd"].value.toString();
  // alert("fname"+fname);

  var invocationData = 
    adapter: 'SQLDemo',
    procedure: 'procedure4',
    parameters:[fname,lname,email,pwd]
  ;

  var options = 
    onSuccess : InsertDataSuccess,
    onFailure : InsertDataFailed,
    timeout : 30000
  ;
  WL.Client.invokeProcedure(invocationData, options);


function InsertDataSuccess(result)
  alert("Success");
  WL.Logger.debug("Retrieve success" +  JSON.stringify(result));


function InsertDataFailed(result)
  alert("Failure");
  WL.Logger.debug("Retrieve success" +  JSON.stringify(result));

适配器的SQLDemo-impl.js:

var procedure4Statement = WL.Server.createSQLStatement("INSERT INTO INNOVATION (FIRSTNAME,LASTNAME,EMAIL,PASSWORD) VALUES(?,?,?,?)");
function procedure4(fname,lname,email,password) 
  return WL.Server.invokeSQLStatement(
      preparedStatement : procedure4Statement, 
      parameters : [fname,lname,email,password] 
  );

【问题讨论】:

您在 InsertDataFailed... 中遇到的错误是什么?结果是什么”?另外,添加“procedure4”的实现。 它将执行 onFailure 函数 var procedure4Statement = WL.Server.createSQLStatement("INSERT INTO INNOVATION (FIRSTNAME,LASTNAME,EMAIL,PASSWORD) VALUES(?,?,?,?)"); //var procedure3Statement = WL.Server.createSQLStatement("select * from INNOVATION where FIRSTNAME=? and id=?"); function procedure4(fname,lname,email,password) return WL.Server.invokeSQLStatement(preparedStatement : procedure4Statement, parameters : [fname,lname,email,password] ); 1) 显然请用代码编辑问题 - 而不是在 cmets 中。 2)我在问它在“结果”中打印什么。 还要在 InsertDataFailed() 中将“result”更改为“result.errorMsg”。 Result.errorMsg 返回 null,如果我在表单中给出空值,则返回成功消息 【参考方案1】:

来自 messages.log 文件:

E FWLSE0099E: 调用过程 [project DemoProject]SQLDemo/SqlStatementFWLSE0100E:参数:[项目 DemoProject] DB2 SQL 错误:SQLCODE=-104,SQLSTATE=42601, SQLERRMC=from;AJAX 设置 FIRSTNAME=?;.., DRIVER=3.61.75。执行 查询:更新 AJAX 设置 FIRSTNAME=?从 AJAX 哪里 id=? FWLSE0101E: 原因:[项目 DemoProject]com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from;AJAX 设置 FIRSTNAME=?;.., 驱动程序=3.61.75java.lang.RuntimeException:DB2 SQL 错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from;AJAX set FIRSTNAME=?;.., DRIVER=3.61.75.

...

无效的数据转换:参数实例 vinod 对 请求的转换。 ERRORCODE=-4461,SQLSTATE=42815

下面还有更多的例外。

确保在您的数据库方案中您确实期望字符串,而不是过多地限制值长度等。

【讨论】:

Idan Adar 我的适配器正在工作,每当我单独调用我的适配器时,浏览器中的结果就像 "isSuccessful": true, "updateStatementResult": "updateCount": 1 表示没有问题数据库 是的,您的适配器工作正常,您的数据库配置错误。阅读错误。谷歌错误。 Idan Adar 我已成功将数据插入数据库,问题是,我的控制器 GOTO 功能失败,但数据已插入。 问题是适配器返回空值,但是插入了数据。

以上是关于IBM MobileFirst 中的 SQL 适配器调用失败的主要内容,如果未能解决你的问题,请参考以下文章

IBM MobileFirst 适配器调用 404

IBM-Mobilefirst 意外错误中的推送通知

IBM MobileFirst - 连接数据库 Java 适配器的问题

IBM MobileFirst 8.0 适配器中的 RESTful 方法

ibm mobilefirst - 从 java 适配器调用 javascript 适配器

IBM Mobilefirst Java 适配器会话超时