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);

} );


2 回复

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}`);
    }
);

解释

  1. 连接数据库

    • ConnectDataBase 函数负责建立与数据库的连接。
    • 如果连接成功,将调用回调函数传递连接对象。
  2. 执行删除操作

    • DeleteData 函数接收上一步的连接对象作为参数。
    • 执行 SQL 删除语句,删除满足条件的记录。
    • 使用 results.rowsAffected 获取删除操作影响的行数。
  3. 处理结果

    • async.waterfall 的最终回调函数处理所有步骤的结果。
    • 如果有错误发生,则抛出异常。
    • 如果一切顺利,输出总的影响行数。

通过这种方式,我们可以确保每个步骤按顺序执行,并且可以捕获和处理任何可能发生的错误。


为了使用 node-oracle 访问数据库并通过 async.waterfall 确认删除操作影响的行数,我们可以按以下步骤进行。这里提供了一个简单的示例代码,帮助你理解如何实现这一功能。

首先,确保你已经安装了 node-oracleasync 模块:

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.");
    }
);

解释

  1. 连接数据库: 使用 oracledb.getConnection 方法来连接到数据库。如果连接成功,将连接对象传递给下一步。

  2. 执行删除操作: 使用 connection.execute 方法执行删除 SQL 语句。这里我们设置 { autoCommit: true } 以确保删除操作完成后自动提交事务。

  3. 确认删除行数: 删除操作完成后,通过 result.rowsAffected 可以获取被删除的行数。这表明删除操作成功影响了多少行数据。

  4. 处理错误: 在每个步骤中都检查是否有错误发生,并及时处理错误。如果在某个步骤中发生错误,则整个流程会中断,并进入错误处理函数。

这个示例展示了如何使用 async.waterfall 来组织异步操作,并通过最后一步检查删除操作是否成功以及影响了多少行数据。

回到顶部