はじめに
20世紀に作られ現在も稼働中のVBのシステムにデータ出力の要件があったので、Node.jsで実装してみました。
あまりにも情報が少なすぎて苦労したので備忘録として残します。
環境
項目 | 内容 |
---|---|
データベース | Pervasive PSQL v10 (サービスとして起動) |
OS | Windwos10 |
準備
Pervasiveのインストールディレクトリ配下にある以下の3ファイルが必要です。
- pvjdbc2.jar
- pvjdbc2x.jar
- jpscs.jar
プロジェクトディレクトリに drivers というディレクトリを作ってコピーしておきます。
ソース
Pervasiveデータベースからレコードを取得してJSONを返すAPIサーバーのサンプルです。
なお、このプログラムにルーティングするExpress/Routerのプログラムが別途必要です。
Pervasiveのサービスが起動しているホスト上でプログラムが実行されることを前提としています。
constexpress=require("express");constrouter=express.Router();constJDBC=require("jdbc");constjinst=require("jdbc/lib/jinst");if(!jinst.isJvmCreated()){jinst.addOption("-Xrs");jinst.setupClasspath(["./drivers/pvjdbc2.jar","./drivers/pvjdbc2x.jar","./drivers/jpscs.jar"]);}constconf={url:"jdbc:pervasive://localhost:1583/MYDATA?transport=tcp",drivername:"com.pervasive.jdbc.v2.Driver",properties:{}};constinitializeCB=err=>{if(err){console.log(err);}};constreserveCB=(err,connObj,sql)=>{returnnewPromise((resolve,reject)=>{if(!connObj){console.log("connObj is undefined");reject(err);}constconn=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)=>{constjdbc=newJDBC(conf);jdbc.initialize(initializeCB);jdbc.reserve((err,connObj)=>{reserveCB(err,connObj,"SELECT * FROM MYTABLE").then(data=>{constheaders={"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=>{});});});});