2011-12-15 8 views
0

返される列の数が異なるため、どの列が存在するかを知る必要がある結果セットを処理しています。私はこのように返されるカラム名を抽出できることがわかった。jdbcのメタデータオブジェクトから完全な列名を取得する

ResultSetMetaData meta = rs.getMetaData(); 
ArrayList<String> columns = new ArrayList<String>(); 
for (int i = 0; i < meta.getColumnCount(); i++) { 
    columns.add(meta.getColumnLabel(i+1)); 
} 

しかしこれは私に私SQLで定義された完全な列名を与えるものではありません。つまり

select events.id, events.name from events; 

「ID、名前」ではなく、テーブルを結合し、返されるカラム名に異なるしたいときはかなり悪いです「events.id、events.name」として表示されます。

+0

私は海流選択した列のテーブル名の値を取得するために meta.getTableName(I + 1) を使用することができるようです。 – slott

答えて

2

答えは次のとおりです。select文からテーブルエイリアスを取得することはできません。ただし、列の基礎となるテーブルの名前を取得できます。したがって、テーブルエイリアスを使用せずに実際のテーブルを使用しているので、ResultSetMetaDataからgetTable(int)を使用してこれを取得できるはずです。

2

テーブルを結合するときにエイリアスを指定する必要があります。 getColumnName() - 列名を返し、getColumnLabel() - 列ラベル(エイリアス)を返す2つの方法があります。エイリアスが指定されていない場合、getColumnLabel()getColumnName()によって返された値と同じ値を返します。

+0

エイリアスは必須ではなく、クラス名に基づいて動的にSQL文を作成しています。ここでは、すべてのカラム名の前にテーブル名が付いているため、エイリアスが不要です。 – slott

関連する問題