Ошибка вызова адаптера SQL в IBM MobileFirst

Я пытаюсь вставить данные в базу данных с помощью адаптера SQL на платформе IBM mobilefirst, однако мой код достигает функции отказа...

основной.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] 
  });
}

person Vinod Kumar Marupu    schedule 22.04.2015    source источник
comment
И какую ошибку вы получаете в InsertDataFailed...? Что в итоге? Также добавьте реализацию процедуры 4.   -  person Idan Adar    schedule 22.04.2015
comment
Это происходит в функции onFailure var procedure4Statement = WL.Server.createSQLStatement(INSERT INTO INNOVATION (FIRSTNAME,LASTNAME,EMAIL,PASSWORD) VALUES(?,?,?,?)); //var procedure3Statement = WL.Server.createSQLStatement (выберите * из INNOVATION, где FIRSTNAME=? и id=?); function procedure4(fname,lname,email,password) { return WL.Server.invokeSQLStatement({ prepareStatement: procedure4Statement, параметры: [fname,lname,email,password]}); }   -  person Vinod Kumar Marupu    schedule 22.04.2015
comment
1) очевидно, пожалуйста, отредактируйте вопрос с кодом, а не в комментариях. 2) Я спрашиваю, что он печатает в результате.   -  person Idan Adar    schedule 22.04.2015
comment
Также измените результат на result.errorMsg в InsertDataFailed().   -  person Idan Adar    schedule 22.04.2015
comment
Результат.errorMsg возвращает ноль, и если я даю пустые значения в своей форме, он возвращает сообщение об успехе   -  person Vinod Kumar Marupu    schedule 22.04.2015
comment
@vinodh, можете ли вы предоставить журналы на стороне сервера.   -  person dhineshsundar    schedule 22.04.2015
comment
@dhineshsundar Не могли бы вы сообщить мне, где я могу найти журналы на стороне сервера в Mobile First Server. Спасибо.   -  person Vinod Kumar Marupu    schedule 22.04.2015
comment
@vinodh, выберите MobileFirst Development Server в представлении консоли.   -  person dhineshsundar    schedule 22.04.2015
comment
Я проверил код от начала до конца, и он работает (проверено в базе данных). Журналы сервера действительно необходимы. Вы можете найти файл messages.log в ‹eclipse-workspace›\MobileFirstServerConfig\servers\worklight\logs\ (или, как упоминал @dhineshsundar, в представлении MobileFirst Development Server представления Console в Eclipse.   -  person Idan Adar    schedule 22.04.2015
comment
@IdanAdar00000651 SystemErr R 27276020 WorklightManagementPU-derby INFO [LargeThreadPool-thread-652] openjpa.Runtime — хотя вы используете оптимистичные транзакции, OpenJPA теперь начинает транзакцию хранилища данных, поскольку вы запросили блокировку некоторых данных.   -  person Vinod Kumar Marupu    schedule 22.04.2015
comment
Пожалуйста, загрузите весь файл куда-нибудь, например, на Google Диск, Dropbox и т. д.   -  person Idan Adar    schedule 22.04.2015
comment
Винод... мы запросили полный файл messages.log из указанного выше места. Не ваш проект(!).   -  person Idan Adar    schedule 22.04.2015


Ответы (1)


Из файла messages.log:

E FWLSE0099E: Произошла ошибка при вызове процедуры [проект DemoProject]SQLDemo/SqlStatementFWLSE0100E: параметры: [проект DemoProject] Ошибка SQL DB2: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from;AJAX set FIRSTNAME=?;.., DRIVER =3,61,75. Выполненный запрос: обновить AJAX set FIRSTNAME=? из AJAX, где id=? FWLSE0101E: Причина: [проект DemoProject]com.ibm.db2.jcc.am.SqlSyntaxErrorException: Ошибка SQL DB2: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from; AJAX set FIRSTNAME=?;.., DRIVER=3.61 .75java.lang.RuntimeException: Ошибка SQL DB2: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from; AJAX set FIRSTNAME=?;.., DRIVER=3.61.75.

...

Недопустимое преобразование данных: экземпляр параметра vinod недействителен для запрошенного преобразования. КОД ОШИБКИ=-4461, SQLSTATE=42815

И есть еще исключения ниже этого.

Убедитесь, что в вашей схеме базы данных вы действительно ожидаете строки, не слишком ограничивая длину значения и т. д.

person Idan Adar    schedule 22.04.2015
comment
Идан Адар, мой адаптер работает, и всякий раз, когда я вызываю свой адаптер по отдельности, результат в браузере выглядит следующим образом: { isSuccessful: true, updateStatementResult: { updateCount: 1 } } означает отсутствие проблем с базой данных. - person Vinod Kumar Marupu; 24.04.2015
comment
Да, ваш адаптер работает, ваша база данных настроена неправильно. Прочтите ошибку. Гуглите ошибку. - person Idan Adar; 24.04.2015
comment
Idan Adar Я успешно вставляю данные в базу данных, дело в том, что мой контроллер выполняет функцию отказа GOTO, но данные вставляются. - person Vinod Kumar Marupu; 29.04.2015
comment
Проблема в том, что адаптер возвращает нулевое значение, но данные вставлены. - person Vinod Kumar Marupu; 29.04.2015