-1

consider a query like select a.apple,b.mango,c.orange from A a,B b,C c where ... (Some conditions)

here i need to fetch only the column names based on the query.

apple mango orange.

we have a query builder where end user creates/generates any type of query using that, my duty is to select only the column names from the query as above for my further operations.

How can i achieve this, through java code or query?

my db is sql server 2005.

4

5 回答 5

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 回答
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 回答
0

如果您使用的是 eclipseLink,您可以根据此链接获取列名

JPA/EclipseLink - 检索列名称

于 2013-08-19T06:47:32.180 回答
0

我找到了一个解决方案,它工作正常。感谢大家花费宝贵的时间。

我们可以通过两种方式实现这一点。

  1. 通过地图。前任:

List> lsMapStringObj = new ArrayList>();
for(Map myMap: lsMapStringObj)
{
for (Map.Entry entry : myMap.entrySet())
{
lsRsult.add(entry.getKey());
}
}

但是在这里,如果查询返回 > 0 行,那么只有我可以获取列名。

  1. 这给出了我期望的解决方案(> = 0行)

    PreparedStatement ps=con.prepareStatement(sQuery);
    结果集 rs=ps.executeQuery();
    ResultSetMetaData rsmd=rs.getMetaData();
    int numColumns = rsmd.getColumnCount();
    for (int i = 1; i <= numColumns; ++i)
    {
    lsResult.add(rsmd.getColumnName(i));
    }
    返回 lsResult;

终于明白了,希望对其他人有帮助。享受编程...!!!

于 2013-08-20T11:12:51.897 回答
0

一种更简单的解决方案是使用 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 回答