【问题标题】:Getting column names from query从查询中获取列名
【发布时间】:2013-08-20 21:28:31
【问题描述】:

考虑一个查询,例如 select a.apple,b.mango,c.orange from A a,B b,C c where ...(某些条件)

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

苹果 芒果 橙色。

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

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

我的数据库是 sql server 2005。

【问题讨论】:

  • 我找到了答案,我会尽快发布。 (由于声誉问题)

标签: java sql sql-server-2005


【解决方案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】:

如果您只需要显示您已经知道的列名,您可以简单地将它们(列名)直接放入 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);

【讨论】:

  • 感谢您的宝贵回复。这对我很有帮助。
【解决方案3】:

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

JPA/EclipseLink - Retrieve Columns Names

【讨论】:

  • How to Answer: 为链接提供上下文 - 始终欢迎提供潜在解决方案的链接,但请在链接周围添加上下文,以便您的其他用户了解什么它是,为什么它在那里。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
  • 感谢您的宝贵回复。
【解决方案4】:

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

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

  1. 通过地图。 例如:

List> lsMapStringObj = new ArrayList>();
for(Map myMap: lsMapStringObj)
{
for (Map.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 {
    lsResult.add(rsmd.getColumnName(i));
    }
    返回 lsResult;

终于搞定了,希望对大家有帮助。享受编程……!!!

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2023-03-16
      • 2014-10-01
      • 2017-11-21
      • 2020-10-24
      • 2021-09-12
      相关资源
      最近更新 更多