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 で、Adapter for 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 ステートメントが無効であることを示しているため、DB への接続は正常であると推測されます。

これを診断するには、まず DB2 コマンド ラインまたはその他のツールを使用して SQL を実行します。私の推測では、あなたが意味することです

  LARSEN.registration

あなたが言っているのに対し、DATABASE_NAME.registration

于 2014-07-22T07:58:12.317 に答える
0

私自身の質問とその本当に興味深い質問への回答を得ました。https://stackoverflow.com/users/2260967/glen-misquithに感謝[Glen Misquith]

問題は、MYSQLで行ったこととは異なるSQLクエリフレーミングにありました。

アダプタの 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ステートメントでスラッシュを使用する必要があります。DB2 のこの動作を理解したいと思います。また、「Select * from schema.table_name」を直接書くこともできず、データをフェッチする必要がある列名を正確に書くこともできません。

于 2014-07-24T06:03:39.127 に答える