Nodejs与Oracle:使用心得与常见坑
Nodejs与Oracle:使用心得与常见坑
前段时间要使用oracle,搜了下决定采用node-oracle这个库.
-
坑一
windows各种安不上
-
坑二
npm上的版本有问题,需要到github下载它的源码包再手动安装.
-
坑三
如果使用pool的话,记得初始化时需要connection.setAutoCommit(true),否则数据库刷不出记录.
结论:
虽然最终在windows上编译通过,但如果你也用了它,一旦编译不通过赶紧撤吧,去linux搞; 遇到需要编译的第三方库,要清楚自己机器的配置(node版本、vs版本、环境变量)是否正确并满足编译要求; 没事千万别用oracle.
Nodejs与Oracle:使用心得与常见坑
前段时间要使用Oracle数据库,经过一番调研后决定采用node-oracle这个库。以下是我在这过程中遇到的一些坑以及一些使用心得。
坑一:Windows安装问题
在Windows系统中安装node-oracle
遇到了不少麻烦。通常情况下,直接通过npm安装可能会失败,因为这个库需要依赖于一些本地的C++扩展,这些扩展可能无法自动编译成功。例如:
npm install oracledb --save
这一步可能需要手动下载并编译源码才能成功安装。
坑二:npm上的版本问题
即使你成功安装了node-oracle
,也可能发现npm上发布的版本存在问题。我推荐直接从GitHub上下载源码包,然后手动安装。步骤如下:
- 先从GitHub下载源码:
git clone https://github.com/oracle/node-oracledb.git
- 进入目录并安装:
cd node-oracledb npm install
坑三:连接池设置问题
在使用连接池时,需要确保每个连接都设置了autoCommit
为true
,否则可能会导致事务未提交,数据不会被持久化到数据库中。示例代码如下:
const oracledb = require('oracledb');
async function run() {
// 创建连接池
await oracledb.createPool({
user: "myuser",
password: "mypassword",
connectString: "localhost/XEPDB1"
});
let connection = await oracledb.getConnection();
// 设置autoCommit为true
connection.autoCommit = true;
try {
// 执行SQL语句
const result = await connection.execute("INSERT INTO mytable (id, name) VALUES (:1, :2)", [1, 'Test']);
console.log(result);
} catch (err) {
console.error(err);
} finally {
// 释放连接
if (connection) {
await connection.close();
}
}
}
run().catch(err => console.error(err));
结论
尽管最终在Windows上成功编译并通过了测试,但强烈建议在Linux环境下进行开发,因为编译过程更为稳定。此外,务必确保你的机器配置(如Node.js版本、VS版本、环境变量等)满足编译要求。最后,如果可能的话,尽量避免使用Oracle数据库,因为它可能带来不必要的复杂性和麻烦。
oracle 资源太少了。。关于node的
node用oracle的不多,没需求没市场,不想mysql那样,各种库,各种解决方案
最终你用上 oracle 没有
客户要求,不用不行.
我现在正遇到了编码问题,同样的程序跑在我自己的虚拟机ubuntu上拿回来的数据中文正常,把程序放到另一台ubuntu上,拿回来的就是中文乱码
我用npm的,没问题,可能是我的node版本比较老吧。 用oracle,都习惯手动commit。 JAVA项目的datasource,只要数据库是oracle,我也会故意setAutoCommit(false)。
最近正好尝试win7下 node.js 连接 oracle, 已成功连上并能执行增/删/改/查的sql. 请移步查看博文: http://my.oschina.net/zenglingfan/blog/164390 或者在 google 里搜索 《Windows7 下 Node.js 连接 Oracle》
我是在linux上安装成功的,分享下经验,这是我的博文 http://blog.gaoqixhb.com/p/53d98e7f3cff58870566e9b4
windows上没有尝试过,之前碰到一个人讨论过,他的windows上安装不上貌似是VS的版本问题,按照那个github里面的VS2012版本好像就可以了
node-oracle实在是大坑,windows四个人同时试着安装,最后都没安装上
Node.js 与 Oracle:使用心得与常见坑
坑一: Windows 安装问题
在Windows系统上安装node-oracle
可能会遇到一些问题。通常情况下,这个问题是由于缺少必要的编译工具或依赖库导致的。
解决方案: 确保你的系统已经安装了Visual Studio Build Tools,并且设置好了环境变量。你也可以尝试使用其他版本的Node.js或者在Linux上进行开发。
npm install --global windows-build-tools
坑二: npm 版本问题
npm 上的某些版本可能存在问题,建议直接从GitHub下载源码包手动安装。
解决方案: 从GitHub克隆项目源码并手动安装:
git clone https://github.com/nearinfinity/node-oracle.git
cd node-oracle
npm install
坑三: 使用连接池时需要设置自动提交
当你使用连接池时,需要显式地设置connection.setAutoCommit(true)
来确保事务能够正常提交。
示例代码:
const oracledb = require('oracledb');
async function run() {
// 创建连接池
await oracledb.createPool({
user: 'your_username',
password: 'your_password',
connectString: 'your_connection_string'
});
// 获取连接
let connection;
try {
connection = await oracledb.getConnection();
// 设置自动提交
await connection.execute("ALTER SESSION SET AUTOCOMMIT=TRUE");
// 执行SQL语句
const result = await connection.execute(
"INSERT INTO your_table (column1, column2) VALUES (:val1, :val2)",
{ val1: 'data1', val2: 'data2' },
{ autoCommit: true }
);
console.log(result);
} catch (err) {
console.error(err.message);
} finally {
if (connection) {
try {
await connection.close();
} catch (err) {
console.error(err.message);
}
}
}
// 关闭连接池
await oracledb.releasePool();
}
run();
结论
尽管最终在Windows上编译通过,但如果你遇到了编译问题,建议切换到Linux系统进行开发。确保你的机器配置(Node.js版本、VS版本、环境变量)符合编译要求。使用Oracle可能会遇到很多问题,如果不是必须,尽量避免使用。