LoginSignup
5
1

More than 5 years have passed since last update.

ローカルで動くDB2アプリがIBM Cloudで動かなくてハマった話

Posted at

ローカルで動いたNode.js × Db2 Warehouseのアプリケーションが、IBM Cloudにプッシュすると挙動が変わってハマったのでメモ

状況

  • NodejsでIBM Cloudのサービス「DB2 Warehouse」を利用している
  • npmのパッケージibm_dbを利用している
  • ローカルでテストするとエラーなく動く
  • IBM Cloudにデプロイすると以下のエラーが発生する

SQL0010N「string で始まるストリング定数に、終わりの区切り文字が ありません。」

クラウド上でエラーがでたコード

var ibmdb = require('ibm_db');

ibmdb.open("DATABASE=<dbname>;HOSTNAME=<myhost>;UID=db2user;PWD=password;PORT=<dbport>;PROTOCOL=TCPIP", function (err,conn) {
  if (err) return console.log(err);

  conn.query('select 1 from sysibm.sysdummy1', function (err, data) {
    if (err) console.log(err);
    else console.log(data);

    conn.close(function () {
      console.log('done');
    });
  });
});

対処方法

明確な原因は不明であるが、同パッケージで提供されているprepareSync(sql)を利用すると正常に動いた。

var ibmdb = require("ibm_db")
  , cn = "DATABASE=dbname;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=dbuser;PWD=xxx";

ibmdb.open(cn,function(err,conn){
  var stmt = conn.prepareSync("select * from employee where empid = ?");

  //Bind and Execute the statment asynchronously
  stmt.execute([142], function (err, result) {
    data = result.fetchAllSync();
    console.log(data);
    result.closeSync();
    stmt.closeSync();

    //Close the connection
    conn.close(function(err){});
  });
});
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1