-1

select a.apple,b.mango,c.orange from A a,B b,C c where ... (いくつかの条件) のようなクエリを検討してください。

ここでは、クエリに基づいて列名のみをフェッチする必要があります。

アップルマンゴーオレンジ。

エンドユーザーがそれを使用して任意のタイプのクエリを作成/生成するクエリビルダーがあります。私の義務は、さらなる操作のために上記のクエリから列名のみを選択することです。

Javaコードまたはクエリを使用して、これをどのように達成できますか?

私のデータベースはSQL Server 2005です。

4

5 に答える 5

1

ResultSetMetaData Java インターフェースを取得する

PreparedStatement ps=con.prepareStatement("select * from your_table_name");
ResultSet rs=ps.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData();

System.out.println("Total columns: "+rsmd.getColumnCount());
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));

con.close();
于 2013-08-19T06:55:27.730 に答える
1

既に知っている列名のみを表示する必要がある場合は、それら (列名) を直接 SELECT リストに入れることができます。

SELECT apple AS apple ,mango AS mango,orange AS orange

それ以外の場合は、SQL Server の情報スキーマ サービス テーブルを照会できます。

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=OBJECT_NAME(OBJECT_ID('a')) OR TABLE_NAME=OBJECT_NAME(OBJECT_ID('b')) OR TABLE_NAME=OBJECT_NAME(OBJECT_ID('c'))

Java と元のクエリから、 ResultSetMetaDataオブジェクトを使用して列名を読み取ることができます。

ResultSetMetaData rsmd = rs.getMetaData();
 String apple = rsmd.getColumnName(1); //Column apple
 String mango = rsmd.getColumnName(2);
于 2013-08-19T06:54:12.050 に答える
0

より簡単な解決策の 1 つは、String.split を使用して列名をトークン化することです。columnNames の配列を返します。

    String query = "select a.apple,b.mango,c.orange from A a,B b,C c where ... (Some conditions)";
    String[] columnNames= query.split(" [fF][rR][oO][mM] ")[0]
                               .split("[ ]*[sS][eE][lL][eE][cC][tT] ")[1]
                               .split("[ ]*,[ ]*");
    for(int i=0; i<columnNames.length;i++){
       System.out.println(i+".)"+columnNames[i]);
    }

出力:

{a.apple,b.mango,c.orange} //String array
//Sysout    
1.)a.apple        
2.)b.mango        
3.)c.orange
于 2016-06-02T09:57:38.753 に答える
0

eclipseLink を使用している場合は、このリンクに従って列名を取得できます

JPA/EclipseLink - 列名の取得

于 2013-08-19T06:47:32.180 に答える