Nodejs 使用node-oracle访问数据库,并用async.waterfall确认删除数据库时所影响的行数
Nodejs 使用node-oracle访问数据库,并用async.waterfall确认删除数据库时所影响的行数
var bindings = require(’./oracle_bindings’); var async = require(‘async’); var oracle = new bindings.OracleClient();
async.waterfall(
[
// i. check if headers.txt exists
function ConnectDataBase(callback) {
oracle.connect({ “hostname”: “localhost”, “user”: “his”, “password”: “his” }, function(err, connection) {
console.log(“conneted”)
callback(err,connection);
});
},
function DeleteData(connection,callback)
{
var self=this;
this.connection=connection;
self.connection.execute(“delete FROM person WHERE NAME = (:1)”, [‘huangwei’],function(err, results) {
self.connection.setAutoCommit(true);
callback(err,results);
});
}
],
function(err,results)
{
if(err)
{
throw err;
}
console.log(results);
} );
Nodejs 使用node-oracle访问数据库,并用async.waterfall确认删除数据库时所影响的行数
在本示例中,我们将使用 node-oracle
模块连接到 Oracle 数据库并执行删除操作。为了确保删除操作成功并获取受影响的行数,我们将使用 async.waterfall
方法来组织异步任务。
首先,我们需要安装必要的依赖项:
npm install node-oracle async
接下来,我们创建一个简单的脚本来完成上述任务。
示例代码
// 引入所需的模块
const bindings = require('./oracle_bindings');
const async = require('async');
// 创建 Oracle 客户端实例
const oracle = new bindings.OracleClient();
// 使用 async.waterfall 组织异步任务
async.waterfall(
[
// 第一步:连接到数据库
function ConnectDataBase(callback) {
oracle.connect({
"hostname": "localhost",
"user": "his",
"password": "his"
}, function (err, connection) {
if (err) return callback(err);
console.log("Connected to database");
callback(null, connection);
});
},
// 第二步:执行删除操作并获取受影响的行数
function DeleteData(connection, callback) {
connection.execute("DELETE FROM person WHERE name = (:1)", ['huangwei'], function (err, results) {
if (err) return callback(err);
// 设置自动提交
connection.setAutoCommit(true);
// 获取受影响的行数
const affectedRows = results.rowsAffected;
console.log(`Deleted ${affectedRows} rows`);
callback(null, affectedRows);
});
}
],
function (err, results) {
if (err) {
throw err;
}
console.log("All operations completed successfully");
console.log(`Total affected rows: ${results}`);
}
);
解释
-
连接数据库:
ConnectDataBase
函数负责建立与数据库的连接。- 如果连接成功,将调用回调函数传递连接对象。
-
执行删除操作:
DeleteData
函数接收上一步的连接对象作为参数。- 执行 SQL 删除语句,删除满足条件的记录。
- 使用
results.rowsAffected
获取删除操作影响的行数。
-
处理结果:
async.waterfall
的最终回调函数处理所有步骤的结果。- 如果有错误发生,则抛出异常。
- 如果一切顺利,输出总的影响行数。
通过这种方式,我们可以确保每个步骤按顺序执行,并且可以捕获和处理任何可能发生的错误。
为了使用 node-oracle
访问数据库并通过 async.waterfall
确认删除操作影响的行数,我们可以按以下步骤进行。这里提供了一个简单的示例代码,帮助你理解如何实现这一功能。
首先,确保你已经安装了 node-oracle
和 async
模块:
npm install oracledb async
接下来是修改后的代码示例:
const oracledb = require('oracledb');
const async = require('async');
// 连接数据库
async.waterfall(
[
function connectToDatabase(callback) {
oracledb.getConnection({
user: 'your_username',
password: 'your_password',
connectString: 'localhost/XE'
}, function (err, connection) {
if (err) return callback(err);
console.log("Connected to the database.");
callback(null, connection);
});
},
function deleteData(connection, callback) {
connection.execute(
"DELETE FROM person WHERE name = :name",
{ name: 'huangwei' },
{ autoCommit: true },
function (err, result) {
if (err) return callback(err);
console.log(`Deleted ${result.rowsAffected} row(s).`);
callback(null, result);
}
);
}
],
function (err, results) {
if (err) {
console.error("Error occurred:", err);
return;
}
console.log("Operation completed successfully.");
}
);
解释
-
连接数据库: 使用
oracledb.getConnection
方法来连接到数据库。如果连接成功,将连接对象传递给下一步。 -
执行删除操作: 使用
connection.execute
方法执行删除 SQL 语句。这里我们设置{ autoCommit: true }
以确保删除操作完成后自动提交事务。 -
确认删除行数: 删除操作完成后,通过
result.rowsAffected
可以获取被删除的行数。这表明删除操作成功影响了多少行数据。 -
处理错误: 在每个步骤中都检查是否有错误发生,并及时处理错误。如果在某个步骤中发生错误,则整个流程会中断,并进入错误处理函数。
这个示例展示了如何使用 async.waterfall
来组织异步操作,并通过最后一步检查删除操作是否成功以及影响了多少行数据。