无法使用ibm_db获取NodeJS的行计数

时间:2018-09-27 13:42:44

标签: node.js db2

我无法从以下位置获取受影响的行结果

在调试期间,我注意到它总是在conn.querySync(query.sqlUpdate, params);崩溃 Console.log也没有显示任何内容。

我在这里做什么错了?

代码

//imports
const format = require('string-format');


const query = require('../db/query');
const message = require('../common/message');
const constant = require('../common/constant');

var ibmdb = require("ibm_db");
require('dotenv').config();

// access the environment variables for this environment
const database =    "DATABASE=" + process.env.DATABASE  + ";";
const hostname =    "HOSTNAME=" + process.env.HOSTNAME  + ";";
const uid =         "UID="      + process.env.UID       + ";";
const pwd  =        "PWD="      + process.env.PWD       + ";";
const dbport =      "PORT="     + process.env.DBPORT    + ";";
const protocol =    "PROTOCOL=" + process.env.PROTOCOL;

const connString = database+hostname+uid+pwd+dbport+protocol;

function updateContact(params) {
  ibmdb.open(connString, function(err, conn){
    //blocks until the query is completed and all data has been acquired
    var rows = conn.querySync(query.sqlUpdate, params);
    console.log(rows);
  });
}

module.exports.updateContact = updateContact;

1 个答案:

答案 0 :(得分:0)

我终于明白了问题所在。 问题出在我使用querySync函数。此函数不会返回受影响的行数。

https://github.com/ibmdb/node-ibm_db/blob/master/APIDocumentation.md#querySyncApi

正确的方法是先使用prepare,再使用executeNonQuery。

https://github.com/ibmdb/node-ibm_db/blob/master/APIDocumentation.md#executeNonQueryApi

因此,我可以通过API修改代码。

        ...
        conn.prepare(query.SQL_UPDATE, function (error, stmt) {

            if (err) {
                console.log(err);
                return conn.closeSync();
            }

            stmt.executeNonQuery(params, function (err, result) {
                if( err ) {   
                    console.log(err);  
                }
                else {
                    console.log("Affected rows = " + result);
                }

                //Close the connection
                conn.close();               
            });
        });
        ...