从查询中获取列名称

时间:2013-08-19 06:41:23

标签: java sql sql-server-2005

考虑一个查询,例如从a a,B b,C c中选择a.apple,b.mango,c.orange,其中......(某些条件)

这里我只需要根据查询获取列名。

苹果 芒果 橙色。

我们有一个查询构建器,其中最终用户使用它创建/生成任何类型的查询,我的职责是从上面的查询中仅选择列名称以进行进一步的操作。

我如何通过java代码或查询实现这一目标?

我的db是sql server 2005。

5 个答案:

答案 0 :(得分: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 object:

读取列名
ResultSetMetaData rsmd = rs.getMetaData();
 String apple = rsmd.getColumnName(1); //Column apple
 String mango = rsmd.getColumnName(2);

答案 1 :(得分: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();

答案 2 :(得分:0)

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

JPA/EclipseLink - Retrieve Columns Names

答案 3 :(得分:0)

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

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

  1. 通过地图。 例如:
  2. 列表> 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);
      ResultSet rs = ps.executeQuery();
      ResultSetMetaData rsmd = rs.getMetaData();
      int numColumns = rsmd.getColumnCount();
      for(int i = 1; i< = numColumns; ++ i)
      {
           lsResult.add(rsmd.getColumnName(I));
      }
      返回lsResult;

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

答案 4 :(得分:0)

一个更简单的解决方案是使用String.split标记列名。它将返回一个columnNames数组。

Orders
        .Join(OrderRows, o => o.Id, r => r.OrderId, (o,r) => new {o,r})
        .GroupBy(g => new {g.o.Id, g.r.Price})
        .Select(group => new {
            order_amount = group.Count(), 
            Total_ordersum  = group.Key.Price,
        });´

输出:

    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]);
    }