2011-01-24 14 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

あなたの質問を理解していません。列名を表示する方法のサンプル出力を表示できますか? –

+1

どの列と値が一緒になっているかはすでに分かっています。結果セットには列が表示されており、求めた列もわかります。あなたが使用しているコードを明らかにしていない場所や特定の問題を共有していれば、おそらくあなたの質問はもっと意味があるでしょう。 –

答えて

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); 
} 
+0

これは、JDBCを使用していると仮定して行う方法です。しかし、私はOPはJPAを使用していると思います。 – Ray

+0

@レイですが、質問のオリジナル投稿(修正前)を見ると、コードが投稿されていないことがわかりますので、元の質問に基づいて提案しました。 – camickr

1

あなたはこれを行うことができます - あなたはcolumnvalue続いColumnNameにする必要があると仮定 -

SELECT "name" as column1, name, "address" as column2, address, "password" as column3, password FROM users; 
関連する問題