考虑以下sqlite3 nodejs代码
db.each("SELECT rowid AS id, item FROM SampleTable", function(err, row) {
return console.log(row);
});
这将在控制台中打印以下内容
{ id: 1, item: 'Item #0' }
{ id: 2, item: 'Item #1' }
{ id: 3, item: 'Item #2' }
{ id: 4, item: 'Item #3' }
{ id: 5, item: 'Item #4' }
{ id: 6, item: 'Item #5' }
{ id: 7, item: 'Item #6' }
{ id: 8, item: 'Item #7' }
{ id: 9, item: 'Item #8' }
{ id: 10, item: 'Item #9' }
我想在不使用列名的情况下获取记录值(1 2 3 ...& Item#0,Item#1 ...),即不使用row.id和row.item。我的实际项目本质上非常动态,并处理多个DB中的不同表。因此无法知道列名称。
我在node-sqlite3 wiki https://github.com/mapbox/node-sqlite3/wiki/API
中找到了以下内容It is impossible to access them by column index; the only supported way is by column name.
我想知道在不使用列名的情况下获取记录值是否有任何解决方法。我能得到的最接近的是以下内容。 loop and get key/value pair for JSON array using jQuery
答案 0 :(得分:1)
您可以使用for / in来获取列名称(或行对象属性)。
使用函数按索引访问属性:
//col is a 0-based column index
function getRowColumn(row, col) {
for (p in row) {
if (col==0) return row[p];
--col;
}
}
所以你可以使用:
... getRowColumn(row, 0) ...
... getRowColumn(row, 1) ...
... getRowColumn(row, 2) ...
在最近的浏览器中,this solution可用于按列索引访问行数据:row[Object.keys(columnIndex)]
使用for
:
function rowArray(row) {
var a=[];
for(var m in row) a.push(row[m]);
return a;
}
所以你可以使用:
db.each("SELECT rowid AS id, item FROM SampleTable", function(err, row) {
return console.log(rowArray(row));
});