来自节点jdbc的Redshift数据访问抛出错误

时间:2015-09-03 05:15:58

标签: node.js jdbc amazon-redshift

当我使用下面提到的代码从redshift尝试数据时,我得到以下错误:我觉得这是由于jdbc module没有正确安装。可以

/ *  * GET用户列表。  * /

var jdbc =require('jdbc');
var express = require('express');

var config = {
        libpath: '../RedshiftJDBC41-1.1.6.1006.jar',
        drivername: 'com.amazon.redshift.jdbc41.Driver',
        url: 'jdbc:redshift://exampleCluster.abcdkcmf0ug1.us-west-2.redshift.amazonaws.com:5439/xyz',
        properties: [
            ['user', 'XXXXX'],
            ['password', 'XXXXXX']
        ]
    };

console.log(config);
var hsqldb=new jdbc(config);

hsqldb.status();
hsqldb.initialize(config, function(err, res) {

    console.log("Connection opened successfully!");


    if (err) {
console.log("Error during Initializing");
        console.log(err);
    }

});


exports.list = function(req, res){


    hsqldb.open(function(err, conn) {
         if (conn) {
        // SELECT statements are called with executeQuery 
             hsqldb.executeQuery("select * from schema.table", function(err, results) {
            if (err) {
                 console.log(err);
                } else if (results) {
                  console.log(results);
                  res.type('text/plain');           // set content-type
                  res.send(results);    
                }

            hsqldb.close(function(err) {
                if(err) {
                  console.log(err);
                } else {
                  console.log("Connection closed successfully!");
                }
                });

                }
);
         }
        });
 // res.send("respond with a resource");
};

错误:

  

C:\用户\ ABCD \ node_modules \ JDBC \ lib中\ pool.js:97       return callback(null);              ^   TypeError:object不是函数       在C:\ Users \ ABCD \ node_modules \ jdbc \ lib \ pool.js:97:12       在C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:52:16       在C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:363:13       在C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:52:16       at done(C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:243:17)       在C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:44:16       在C:\ Users \ ABCD \ node_modules \ jdbc \ node_modules \ async \ lib \ async.js:360:17       在C:\ Users \ ABCD \ node_modules \ jdbc \ lib \ pool.js:90:7       在C:\ Users \ ABCD \ node_modules \ jdbc \ lib \ pool.js:28:14       在C:\ Users \ ABCD \ node_modules \ jdbc \ lib \ drivermanager.js:26:18

类似帖子:Redshift data access from node jdbc

有人可以告诉我这里出了什么问题。代码有问题吗?或者是否未正确安装模块。我觉得这是因为我没有正确安装模块,因为我在安装jdbc模块时看到了一些错误。

请告诉我在节点js中安装jdbc模块的步骤。

1 个答案:

答案 0 :(得分:0)

自版本0.1.1发布以来,node-jdbc API已经完全重做,因此任何与旧版本的node-jdbc相关的旧文档,包括我对上面链接的问题的回答,都不再有用。

使用node-jdbc 0.1.1,连接到数据库的代码应如下所示:

var jdbc = require('jdbc');
var jinst = require('jdbc/lib/jinst');

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

var config = {
    drivername: 'com.amazon.redshift.jdbc41.Driver',
    url: 'jdbc:redshift://exampleCluster.abcdkcmf0ug1.us-west-2.redshift.amazonaws.com:5439/xyz',
    properties: {
        "user": "XXXXX",
        "password": "XXXXX"
    }
};

var hsqldb=new JDBC(config);

hsqldb.status();
hsqldb.initialize(function(err, res) {
    /* ... */
});

特别是:

  • 类路径现在已在jinst对象中配置,并已移出配置。
  • properties现在是一个对象,而不是版本0.0.15中的2元素数组数组。
  • initialize方法现在只接受一个参数,即回调。它不再将配置作为构造函数中提供的参数。
  • node-jdbc据称支持在user对象中指定passwordconfig属性,这样可以避免使用properties。但是,我建议避免使用它,因为它不起作用。如果您尝试使用,即使您输入的用户名和密码无效,也可能会出现错误。

您获得有些难以理解的错误的原因是因为您将配置对象传递给initialize方法,该方法只需要回调。在Node尝试“调用”之前,错误并未引起注意。配置对象好像是一个函数,当然失败了。