首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JDBC将Virtuoso连接到NodeJS

通过JDBC将Virtuoso连接到NodeJS
EN

Stack Overflow用户
提问于 2017-09-29 23:46:20
回答 1查看 642关注 0票数 0

我有以下代码通过Node和JDBC (通过npm上的jdbc包)连接到Virtuoso 7 Server:

代码语言:javascript
复制
    const checkDatabaseConnection = function(callback)
{
    const JDBC = require('jdbc');
    const jinst = require('jdbc/lib/jinst');

    if (!jinst.isJvmCreated()) {
        jinst.addOption("-Xrs");
        jinst.setupClasspath([
            Pathfinder.absPathInApp("conf/virtuoso-jdbc/virtjdbc4.jar")
        ]);
    }

    const config = {
        // Required
        url : "jdbc:virtuoso://192.168.56.249:1111",
        drivername: 'virtuoso.jdbc4.Driver',
        minpoolsize: 1,
        maxpoolsize: 100,
        maxidle : 5000,
        username : "dba",
        password : "dba",

        properties: {}
    };

    const jdbcdb = new JDBC(config);

    jdbcdb.initialize(function(err) {
        if (err) {
            console.log(err);
        }
    });
};

它会立即返回:

代码语言:javascript
复制
{ Error: Error running static method
virtuoso.jdbc4.VirtuosoException: Virtuoso Communications Link Failure (timeout) : Connection to the server lost
    at virtuoso.jdbc4.VirtuosoFuture.nextResult(VirtuosoFuture.java:63)
    at virtuoso.jdbc4.VirtuosoConnection.connect(VirtuosoConnection.java:328)
    at virtuoso.jdbc4.VirtuosoConnection.connect(VirtuosoConnection.java:224)
    at virtuoso.jdbc4.VirtuosoConnection.<init>(VirtuosoConnection.java:169)
    at virtuoso.jdbc4.Driver.connect(Driver.java:58)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
 cause: nodeJava_virtuoso_jdbc4_VirtuosoException {} }

运行Virtuoso JDBC驱动程序4.2,Virtuoso 7。

我在相同的IP和端口上telnet到服务器,服务器正在监听。可能的问题是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-03-14 04:50:33

1)检查引用node-jdbc配置属性username错误,一定是user

2)下一个示例对我来说工作正常。

代码语言:javascript
复制
var JDBC = require('jdbc');
var jinst = require('jdbc/lib/jinst');
var asyncjs = require('async');

if (!jinst.isJvmCreated()) {
  jinst.addOption("-Xrs");
  jinst.setupClasspath(['./drivers/virtjdbc4.jar']);
}

const config = {
     // Required
     url : "jdbc:virtuoso://192.168.10.101:1111",
     drivername: 'virtuoso.jdbc4.Driver',
     minpoolsize: 1,
     maxpoolsize: 100,
     maxidle : 5000,
     user : "dba",
     password : "dba",

     properties: {}
 };

 const jdbcdb = new JDBC(config);

 jdbcdb.initialize(function(err) {
     if (err) {
         console.log(err);
     }
 });

jdbcdb.reserve(function(err, connObj) {
  if (connObj) {
    console.log("Using connection: " + connObj.uuid);
    var conn = connObj.conn;

    asyncjs.series([
      function(callback) {
        console.log("call create Statement");

        conn.createStatement(function(err, statement) {
          if (err) {
            callback(err);
          } else {
            console.log("execute query");

            statement.executeQuery("SELECT * FROM Demo.demo.Artist",
                                   function(err, resultset) {
              if (err) {
                callback(err)
              } else {
                resultset.toObjArray(function(err, results) {
                  console.log('res='+JSON.stringify(results));
                  if (results.length > 0) {
                    console.log("Name: " + results[0].Name);
                  }
                  callback(null, resultset);
                });
              }
            });
          }
        });
      }
    ], function(err, results) {
      // Release the connection back to the pool.
      if (err) 
        console.log("Error:"+err);

      jdbcdb.release(connObj, function(err) {
        if (err) {
          console.log(err.message);
        }
      });
    });
  }
});

输出日志:

代码语言:javascript
复制
Using connection: f5c60576-1da5-4129-af0a-f25d10160f21
call create Statement
execute query
res=[{"ArtistID":1,"CountryCode":"nl","Name":"Rembrandt Harmenszoon van Rijn"}]
Name: Rembrandt Harmenszoon van Rijn
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46492508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档