はじめに
20世紀に作られ現在も稼働中のVBのシステムにデータ出力の要件があったので、Node.jsで実装してみました。
あまりにも情報が少なすぎて苦労したので備忘録として残します。
環境
項目 | 内容 |
---|---|
データベース | Pervasive PSQL v10 (サービスとして起動) |
OS | Windwos10 |
node | v13.9.0 |
jdbcライブラリ | jdbc@0.7.2 |
準備
Pervasiveのインストールディレクトリ配下にある以下の3ファイルが必要です。
- pvjdbc2.jar
- pvjdbc2x.jar
- jpscs.jar
プロジェクトディレクトリに drivers というディレクトリを作ってコピーしておきます。
ソース
PervasiveのMYDATAデータベースのMYTABLEテーブルから全レコードを取得してJSONを返すAPIサーバーのサンプルです。
なお、このプログラムにルーティングするExpress/Routerのプログラムが別途必要です。
Pervasiveのサービスが起動しているホスト上でプログラムが実行されることを前提としています。
const express = require("express");
const router = express.Router();
const JDBC = require("jdbc");
const jinst = require("jdbc/lib/jinst");
if (!jinst.isJvmCreated()) {
jinst.addOption("-Xrs");
jinst.setupClasspath([
"./drivers/pvjdbc2.jar",
"./drivers/pvjdbc2x.jar",
"./drivers/jpscs.jar"
]);
}
const conf = {
url: "jdbc:pervasive://localhost:1583/MYDATA?transport=tcp",
drivername: "com.pervasive.jdbc.v2.Driver",
minpoolsize: 10,
maxpoolsize: 100,
properties: {}
};
const initializeCB = err => {
if (err) {
console.log(err);
}
};
const reserveCB = (err, connObj, sql) => {
return new Promise((resolve, reject) => {
if (!connObj) {
console.log("connObj is undefined");
reject(err);
}
const conn = connObj.conn;
conn.createStatement((err, statement) => {
if (err) {
console.log(err);
reject(err);
}
statement.executeQuery(sql, (err, resultset) => {
if (err) {
console.log(err);
reject(err);
}
resultset.toObjArray((err, result) => {
resolve(result);
});
});
});
});
};
module.exports = router;
/**
* テーブルから全レコードを取得しJSONを返す
*/
router.post("/", (req, res) => {
const jdbc = new JDBC(conf);
jdbc.initialize(initializeCB);
jdbc.reserve((err, connObj) => {
reserveCB(err, connObj, "SELECT * FROM MYTABLE")
.then(data => {
const headers = {"Content-Type": "text/json;charset=utf-8"};
res.set(headers).json(data);
})
.then(() => {jdbc.release(connObj, (err) => {if (err) {console.log(err.message);}})
})
.then(() => {jdbc.purge(err => {});});
});
});