当前位置:  开发笔记 > 编程语言 > 正文

从java.sql.ResultSet中检索列名

如何解决《从java.sql.ResultSet中检索列名》经验,为你挑选了5个好方法。

java.sql.ResultSet没有办法String通过使用列的索引获取列的名称?我查看了API文档但我找不到任何东西.



1> Brian Agnew..:

您可以从ResultSet元数据中获取此信息.请参见ResultSetMetaData

例如

 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
 ResultSetMetaData rsmd = rs.getMetaData();
 String name = rsmd.getColumnName(1);

你可以从那里得到列名.如果你这样做

select x as y from table

然后rsmd.getColumnLabel()也会得到检索到的标签名称.


如果检索带有标签的列,请参阅`rsmd.getColumnLabel`(例如`SELECT columnName AS ColumnLabel`
当我看到列数从1开始时你可能会感到惊讶.你可以用`for(int i = 1; i <= rsmd.getColumnCount(); i ++)迭代列名.字符串名= rsmd.getColumnName(i);`
@membersound是,如[其Javadoc](https://docs.oracle.com/javase/10/docs/api/java/sql/ResultSetMetaData.html#getColumnLabel(int))中所述:_“如果是SQL`未指定AS,从getColumnLabel返回的值将与getColumnName方法返回的值相同。在几乎所有情况下,您都应使用`getColumnLabel`而不是`getColumnName`。

2> Cyntech..:

除了上面的答案,如果您正在使用动态查询并且您想要列名但不知道有多少列,则可以使用ResultSetMetaData对象首先获取列数,然后循环它们.

修改Brian的代码:

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();

// The column count starts from 1
for (int i = 1; i <= columnCount; i++ ) {
  String name = rsmd.getColumnName(i);
  // Do stuff with name
}


@Martin不,因为那将尝试获得不存在的列n + 1.如果你想要绝对简洁,那就是`i <= columnCount`.

3> simon..:

您可以使用ResultSetMetaData(http://java.sun.com/javase/6/docs/api/java/sql/ResultSetMetaData.html)对象,如下所示:

ResultSet rs = stmt.executeQuery("SELECT * FROM table");
ResultSetMetaData rsmd = rs.getMetaData();
String firstColumnName = rsmd.getColumnName(1);



4> 小智..:

这个问题很老,以前的答案也是正确的.但是当我发现这个话题时我正在寻找的就像这个解决方案.希望它可以帮助某人.

// Loading required libraries    
import java.util.*;
import java.sql.*;

public class MySQLExample {
  public void run(String sql) {
    // JDBC driver name and database URL
    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost/demo";

    // Database credentials
    String USER = "someuser"; // Fake of course.
    String PASS = "somepass"; // This too!

    Statement stmt = null;
    ResultSet rs = null;
    Connection conn = null;
    Vector columnNames = new Vector();

    try {
      // Register JDBC driver
      Class.forName(JDBC_DRIVER);

      // Open a connection
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      // Execute SQL query
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
      if (rs != null) {
        ResultSetMetaData columns = rs.getMetaData();
        int i = 0;
        while (i < columns.getColumnCount()) {
          i++;
          System.out.print(columns.getColumnName(i) + "\t");
          columnNames.add(columns.getColumnName(i));
        }
        System.out.print("\n");

        while (rs.next()) {
          for (i = 0; i < columnNames.size(); i++) {
            System.out.print(rs.getString(columnNames.get(i))
                + "\t");

          }
          System.out.print("\n");
        }

      }
    } catch (Exception e) {
      System.out.println("Exception: " + e.toString());
    }

    finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (stmt != null) {
          stmt.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (Exception mysqlEx) {
        System.out.println(mysqlEx.toString());
      }

    }
  }
}



5> Sedrick..:

SQLite 3

使用getMetaData();

DatabaseMetaData md = conn.getMetaData();
ResultSet rset = md.getColumns(null, null, "your_table_name", null);

System.out.println("your_table_name");
while (rset.next())
{
    System.out.println("\t" + rset.getString(4));
}

编辑:这也适用于PostgreSQL

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有