ResultSetMeta中的方法getColumnName无法返回列的正确名称(jdbc)

时间:2016-03-16 14:15:44

标签: java mysql jdbc

我想在mysql中获得列.like字符串显示的表标签。像这样 enter image description here 但是,当我使用getColumnName时,结果是返回的字符串和下面的字符串之间存在一些差异。像这样: enter image description here 但是当我调试时,它在Eclipse中的变量浏览器中是正确的,像这样:  enter image description here 我无法找到获得专栏的其他方式。似乎返回的字符串是originalColumnName,但如何获取ColumnName?任何人都知道如何解决它?

有我的代码,我知道代码中还有其他问题。请假设所有列的类型都是String。

      public ResultSet DisplayShowTables() throws SQLException
  {
      ResultSet Res = Sta.executeQuery("DESC Code2Name");
      ResultSetMetaData ResMeta = Res.getMetaData();
      String [] ColumnName = new String [ResMeta.getColumnCount()];
      int MetaCount = ResMeta.getColumnCount();
      for (int i = 0; i < MetaCount; i++) {
          ColumnName [i] =  ResMeta.getColumnName(i+1);
    }
      String LeftAlignFormat = "|";
      String Separator = "+";
      for (int i = 0; i < MetaCount; i++) {
          LeftAlignFormat = LeftAlignFormat.concat(" %-20s |");
          Separator =Separator.concat("----------------------+");
    }
      LeftAlignFormat = LeftAlignFormat.concat("%n");
      Separator = Separator.concat("%n");
      if(Res.isBeforeFirst()){
            System.out.format(Separator);
            System.out.format(LeftAlignFormat, ColumnName);
            System.out.format(Separator);   
        }
      while (Res.next()) {
        Vector<String> RowData = new Vector<String>();
        for (int i = 0; i < MetaCount; i++) {
            RowData.add(Res.getString(i+1).toString());
        }
        System.out.format(LeftAlignFormat, RowData);
    }
        if(Res.isAfterLast())
            System.out.format(Separator);
      return Res;
  }

1 个答案:

答案 0 :(得分:5)

看起来DESC只是查询具有列别名的信息模式的快捷方式。

可以使用ResultSetMetadata.getColumnLabel(int)检索列别名。

JDBC将列标签定义为:

  

获取指定列的建议标题,以便在打印输出和显示中使用。建议的标题通常由SQL AS子句指定。如果未指定SQL AS,则getColumnLabel返回的值将与getColumnName方法返回的值相同。

这也意味着在几乎所有情况下您都应该使用getColumnLabel而不是getColumnName