2011-01-24 131 views
0

我不确定是否有可能..SQL Server 2008 - 如何获得列名和值在一起?

我正在使用SQL Server 2008和Java。

我有一个表

-------------- 
| users | 
-------------- 
| name  | 
| address | 
| password | 
|____________| 

然后我做的:

SELECT name, address, password FROM users; 

我得到了所有值从每列。

但是,如果我也想获取列名称。

当查询结果返回时,我想知道哪一列正在查询。

我该如何获得价值和专栏?有没有可能在不改变使用Java的查询?

代码

em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager(); 
Query query = em.createNativeQuery("SELECT name, address, password, birthday FROM users"); 
//query result is stored in list consists of object array 
List<Object[]> out = query.getResultList(); 

//so result is like this 
List< 
    [john, 1st ave, 1234, 12/12/2010] 
    [mike, 2st ave, 1111, 12/11/2011] 
> 

//now I create JSON 
{name:john, address:1st ave, birthday....} 

但查询可能会改变,所以当我构建JSON我不想硬编码“名”或“地址”。

+0

不理解你的问题。你能显示样品输出你想如何显示列名? – 2011-01-24 06:14:45

+1

你已经知道什么列和值一起。你的结果集有标签列,你也知道你要求的列。如果您分享了您使用的代码不明确或您遇到的具体问题,您的问题可能会更有意义。 – 2011-01-24 06:14:57

回答

3

列名来自ResultSetMetaData。

例如:

String sql = "Select * from Activity"; 
Statement stmt = connection.createStatement(); 
ResultSet rs = stmt.executeQuery(sql); 
ResultSetMetaData md = rs.getMetaData(); 
int columns = md.getColumnCount(); 

// Get column names 

for (int i = 1; i <= columns; i++) 
{ 
    columnNames.addElement(md.getColumnName(i)); 
} 

// Get row data 

while (rs.next()) 
{ 
    Vector row = new Vector(columns); 

    for (int i = 1; i <= columns; i++) 
    { 
     row.addElement(rs.getObject(i)); 
    } 

    data.addElement(row); 
} 
1

你可以只做到这一点 - 假设你需要COLUMNNAME其次columnvalue -

SELECT "name" as column1, name, "address" as column2, address, "password" as column3, password FROM users;