从节点 jdbc 访问 Redshift 数据时抛出错误
Posted
技术标签:
【中文标题】从节点 jdbc 访问 Redshift 数据时抛出错误【英文标题】:Redshift data access from node jdbc throwing errors 【发布时间】:2015-09-03 05:15:58 【问题描述】:当我尝试使用下面提到的代码从 redshift 获取数据时出现以下错误:我觉得这是由于 jdbc module
未正确安装。可能
/* * 获取用户列表。 */
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:\Users\ABCD\node_modules\jdbc\lib\pool.js:97 返回回调(空); ^ TypeError:对象不是函数 在 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 完成后(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 模块时几乎没有看到错误。
请告诉我在 node js 中安装 jdbc 模块的步骤。
【问题讨论】:
【参考方案1】:自 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 应该支持在config
对象中指定user
和password
属性,从而避免为此使用properties
。但是,我建议避免这样做,因为它不起作用。如果您尝试一下,您很可能会收到有关用户名和密码无效的错误,即使您输入正确也是如此。
您收到有些难以理解的错误的原因是您将配置对象传递给 initialize
方法,该方法只需要回调。直到 Node 尝试像函数一样“调用”配置对象时才会注意到该错误,这当然会失败。
【讨论】:
以上是关于从节点 jdbc 访问 Redshift 数据时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 servlet 调用 JDBC 时抛出 NullPointerException
从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生啥?
将数据从 AWS Redshift 导入到 BI Tool 的最快方法