日期:2014-05-16  浏览次数:20421 次

node.js mysql-native 判断结果集合大小


背景

熟悉MYSQL编程的都比较清楚,对于结果集一般都是

while(rs.next()){
    ......................
}

native-mysql给出来的结果集和这个差距较大,从百度的几个结果都是使用

res.on('row', function(r) { 
		log.info( 'read.....');
});
在回调函数里面就可以取出每一条数据继续操作,
那查询没有结果呢,怎么办?


解决办法

通过查看node_modules下的command.js,发现是存放到result里面

在看examples目录下,有这样的代码


'test select no results': function(cb) {
    var db = createConnection();
    var sql = 'SELECT * FROM tbl WHERE id = 1000000000'
    db.query(sql).addListener('resulti', function(r) {
      assert.ok(r.rows.length == 0)
    }).addListener('end', function() {
      db.close();
      cb();
    })
  },

那综合看,可以用下面的方法来处理

    var sql = 'SELECT * FROM users'
    dbConn.query(sql).addListener('end', function() {
         log.info("end "+this.result.rows.length);
	 log.info("end "+this.result.rows[0][0]);   ///如果有结果,就这么取,之前需要判断。 
    })


在end方法里面,对result进行引用,很细粒度的控制。


特别说明

native-mysql只适合小数据结集的操作,所以千万不要返回很多数据,通过条件加以控制。把负载留给mysql。