我试图在我的数据库中将表附加在一起,但出于某种原因,当我检查数据对象时,我会将多余的行添加到每个表中。
所以这是我在数据库中的表(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循环。我非常新,我承认,我不知道我在做什么。但我确实做得最好并且清除了我能找到的每一个来源。任何帮助将不胜感激。提前谢谢!