Node.js使用connection.query()从数据库附加表,从而获得不需要的行bug

时间:2017-03-27 01:06:17

标签: javascript node.js ibm-cloud dashdb

我试图在我的数据库中将表附加在一起,但出于某种原因,当我检查数据对象时,我会将多余的行添加到每个表中。

所以这是我在数据库中的表(dashDB):

ILI_NAMES =表名表

S0100 =具有lat和longs以及其他数据(1864行)的数据集

S1234 =另一个包含纬度和长度以及其他数据(1866行)的数据集

以下是从ILI_NAMES中获取表名以传递给函数的代码。这很好用!

app.get('/select_full_map', function(req, res) {
  //get ILITable Names
  ibmdb.open(dbConnString, function(err, conn) {
    if (err) {
      console.error("Error: ", err);
      return;
    } 
    console.log("**********CONNECTING TO DATABASE**********");
      var query4names = "SELECT * FROM ILI_NAMES";
      conn.query(query4names, function(err, rows) {
        if (err) {
          console.log("Error: ", err);
          return;
        } 
        var iliTableName = rows;
        //console.log(iliTableName[1]);
        var numTables = rows.length;
        queryAll(iliTableName, numTables);
             conn.close(function() {
                 console.log("**********Connection closed successfully.**********");
             });
      });

追加到上面的代码,queryAll函数使用表名创建一个查询字符串,并放在while循环中,以便从数据库中的每个表中回调数据并附加到allData中。我现在遇到的问题是,当我检查allData中的行数时,我得到的行数比预期的多。我已经添加了控制台输出以及我希望控制台输出在下面的内容。

    function queryAll(tableName, numTables){
        var i = 0;
        var query = "";
        var allData = "";

        while (i < numTables){
            query = "SELECT FEATURE_NUMBER, LAT___DEG_DEC_NAD_83_, LONG___DEG_DEC_NAD_83___UTM_ZONE_11_, GFLAG, COMMENTS FROM " + tableName[i].ILI_SECTION_NAME + " WHERE FEATURE_NUMBER IS NOT NULL ORDER BY LAT___DEG_DEC_NAD_83_";
            fetchRows(query, i, function(err,data){
                        if (err) {
                        // error handling code goes here
                        console.log("ERROR : ",err);           
                        }  
                console.log ('NUMBER OF ROWS FROM fetchRows: ' + data.length);
                allData += data;
                console.log ('NUMBER OF ROWS FROM allData: ' + allData.length);     
                //outputAll(data);
                return;
            });
            i++;
        }

      // made this to test, outputs same result 
       function outputAll(data){
            allData += data;            
            console.log ('NUMBER OF ROWS FROM allData: ' + allData.length);
            //res.end(JSON.stringify(allData)); 
       }


      }

      function fetchRows (query, i, callback){
          conn.query(query, function(err, rows) {
            if (err) {
              callback(err, null);
            } else
            callback(null, rows);
            console.log('READING SINGLE TABLE DATA FROM QUERY: ' + query);
            console.log ('NUMBER OF ROWS FROM SINGLE TABLE QUERY: ' + rows.length);
          });   
       }



  });  
});

实际输出控制台:

**********CONNECTING TO DATABASE**********
NUMBER OF ROWS FROM fetchRows: 1864
NUMBER OF ROWS FROM allData: 29823
READING SINGLE TABLE DATA FROM QUERY: SELECT FEATURE_NUMBER, LAT___DEG_DEC_NAD_83_, LONG___DEG_DEC_NAD_83___UTM_ZONE_11_, GFLAG, COMMENTS FROM S1234 WHERE FEATURE_NUMBER IS NOT NULL ORDER BY LAT___DEG_DEC_NAD_83_
NUMBER OF ROWS FROM SINGLE TABLE QUERY: 1864
NUMBER OF ROWS FROM allData: 59678
READING SINGLE TABLE DATA FROM QUERY: SELECT FEATURE_NUMBER, LAT___DEG_DEC_NAD_83_, LONG___DEG_DEC_NAD_83___UTM_ZONE_11_, GFLAG, COMMENTS FROM S0100 WHERE FEATURE_NUMBER IS NOT NULL ORDER BY LAT___DEG_DEC_NAD_83_
NUMBER OF ROWS FROM SINGLE TABLE QUERY: 1866
**********Connection closed successfully.**********

我期望的输出控制台:

**********CONNECTING TO DATABASE**********
NUMBER OF ROWS FROM fetchRows: 1864
NUMBER OF ROWS FROM allData: 1864
READING SINGLE TABLE DATA FROM QUERY: SELECT FEATURE_NUMBER, LAT___DEG_DEC_NAD_83_, LONG___DEG_DEC_NAD_83___UTM_ZONE_11_, GFLAG, COMMENTS FROM S1234 WHERE FEATURE_NUMBER IS NOT NULL ORDER BY LAT___DEG_DEC_NAD_83_
NUMBER OF ROWS FROM SINGLE TABLE QUERY: 1864
NUMBER OF ROWS FROM allData: 3730
READING SINGLE TABLE DATA FROM QUERY: SELECT FEATURE_NUMBER, LAT___DEG_DEC_NAD_83_, LONG___DEG_DEC_NAD_83___UTM_ZONE_11_, GFLAG, COMMENTS FROM S0100 WHERE FEATURE_NUMBER IS NOT NULL ORDER BY LAT___DEG_DEC_NAD_83_
NUMBER OF ROWS FROM SINGLE TABLE QUERY: 1866
**********Connection closed successfully.**********

我怀疑可能导致错误的是异步性或重复的while循环。我非常新,我承认,我不知道我在做什么。但我确实做得最好并且清除了我能找到的每一个来源。任何帮助将不胜感激。提前谢谢!

0 个答案:

没有答案