Node.jsよりJDBCでOracle, Salesforceなどに１ドライバで接続

#はじめに

Node.jsアプリケーションからJDBCでSQL Server、Oracle、DB2、Postgres、MongoDBなどのDBや、Salesforce、Eloqua、Oracle Sales Cloud、Oracle Service CloudなどのSaaSアプリケーションにJDBCで接続する必要性があるならば、DataDirect JDBCドライバを利用すると楽勝です。

この記事では、DataDirect JDBC ドライバを使用して Node.js から Salesforce データに接続してみます。

事前準備
Node.js

#DataDirect Oracle JDBC ドライバのダウンロード＆インストール

1,<a href="https://www.ashisuto.co.jp/datadirect/app_download/" target="_blank">こちら</a>よりDataDirect JDBCドライバをダウンロードします(お試し版が15日使えます)。


2,jarファイルのダウンロードが終了したら、パッケージを実行してJDBCドライバをインストールします。

1)Windowsの場合、インストーラを実行し、JDBCドライバをインストールします。
2)Unix/Linuxの場合、以下のコマンドでドライバをインストールします。

```console
java -jar PROGRESS_DATADIRECT_JDBC_INSTALL.jar
```

##Node.jsのJDBCパッケージをインストールする ​
1,Node.jsでは、JDBCドライバを利用するためにnode-jdbcパッケージをインストールする必要があります。
2,以下のコマンドでパッケージをインストールします。

```console
npm i jdbc
```

3,DataDirect JDBCドライバを/install_dir/Progress/JDBC_XX/libからプロジェクトライブラリにコピーします。

今回はSalesforceで試すので、Salesforce JDBCドライバであるsforce.jarをコピーしました。

#Node.jsからSalesforceに接続する 

1,DataDirect JDBCドライバを経由し、Salesforceに接続。テーブルにクエリするサンプルコードを以下に記述します。必要に応じて変更くださいね！

```console
var JDBC = require('jdbc');
var jinst = require('jdbc/lib/jinst');
var asyncjs = require('async');
if (!jinst.isJvmCreated()) {
    jinst.addOption("-Xrs");
    jinst.setupClasspath(['./drivers/sforce.jar']);
  }
  var config = {
    // SparkSQL configuration to your server
    url: 'jdbc:datadirect:sforce://login.salesforce.com;DatabaseName=default;SecurityToken=stoken',
    drivername: 'com.ddtek.jdbc.sforce.SForceDriver',
    minpoolsize: 1,
    maxpoolsize: 100,
    user: 'saiteja09@gmail.com',
    password: 'password',
    properties: {}
  };
  var sforcesqldb = new JDBC(config);
//initialize
sforcesqldb.initialize(function(err) {
    if (err) {
      console.log(err);
    }
  });
   
  sforcesqldb.reserve(function(err, connObj) {
    if (connObj) {
      console.log("Using connection: " + connObj.uuid);
      var conn = connObj.conn;
       
      // Query the database.
      asyncjs.series([
        function(callback) {
          // Select statement example.
          conn.createStatement(function(err, statement) {
            if (err) {
              callback(err);
            } else {
              statement.setFetchSize(100, function(err) {
                if (err) {
                  callback(err);
                } else {
            //Execute a query
                  statement.executeQuery("SELECT * FROM SFORCE.Account;",
                      function(err, resultset) {
                        if (err) {
                          callback(err)
                        } else {
                          resultset.toObjArray(function(err, results) {
                            //Printing number of records
                            if (results.length > 0) {
                              console.log("Record count: " + results.length);
                              console.log(results);
                            }
                            callback(null, resultset);
                          });
                        }
                      });
                }
              });
            }
          });
        },
      ], function(err, results) {
        // Results can also be processed here.
        // Release the connection back to the pool.
        sforcesqldb.release(connObj, function(err) {
          if (err) {
            console.log(err.message);
          }
        });
      });
    }
  });
```

2,setupClasspath メソッドに注意です。DataDirect Salesforce JDBC ドライバへのパスを指定する必要があります。

上記のコードを実行すると、レコード数とテーブルデータがコンソールに表示されます。

簡単ですね！

参考：<a href="https://www.ashisuto.co.jp/datadirect/connectors/salesforce.html" target="_blank">Salesforce.com対応高速JDBCドライバー</a>