如何在不知道sqlite3 node.js中的列名的情况下获取记录值

时间:2013-12-08 23:43:44

标签: jquery json node.js sqlite

考虑以下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

1 个答案:

答案 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));
});