Получение DB2 SQL Ошибка при запуске запроса выбора с использованием Worklight 6.1.0?

Я пытаюсь подключиться к DB2 в моей локальной сети, используя worklight 6.1.0 и запускаю запрос Select для поиска данных, если они существуют. Но я получаю ошибку ниже:

{
       "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

Но после добавления я не могу развернуть Adapter, и ошибка говорит, что db2admin не существует. Поэтому я пропустил этот шаг в контексте текущего вопроса. Но после прохождения ошибки, которую я получаю, не добавляя эти данные worklight.properties, мне кажется, что "Объект не существует" согласно 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 & db2jcc_9.5.jar в сервер /lib. К его имени добавлено '_9.5', которое я удалил из обоих jar-файлов и сохранило только db2jcc_license_cu.jar и db2jcc.jar.

2 ответа

Решение

Получил ответ на свой вопрос, и он действительно интересный. Благодаря Glen Misquith [Глен Мискит]

Проблема была с кадрированием SQL Query, которое отличается от того, что я делал с MYSQL.

Файл Java Script адаптера:

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' и точно написать имя столбца, из которого должны быть получены данные.

В сообщении об ошибке говорится, что ваш оператор SQL недействителен, и поэтому я предполагаю, что ваше соединение с БД в порядке.

Чтобы диагностировать это, сначала запустите SQL, используя командную строку DB2 или другие инструменты. Я думаю, ты имеешь в виду

  LARSEN.registration

тогда как вы говорите DATABASE_NAME.registration

Другие вопросы по тегам