253 votes

Récupérer les noms de colonnes de java.sql.ResultSet

Avec java.sql.ResultSet existe-t-il un moyen d'obtenir le nom d'une colonne en tant que String en utilisant l'index de la colonne ? J'ai parcouru la documentation de l'API mais je n'ai rien trouvé.

413voto

Brian Agnew Points 143181

Vous pouvez obtenir cette information à partir du ResultSet les métadonnées. Voir ResultSetMetaData

par exemple

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

et vous pouvez obtenir le nom de la colonne à partir de là. Si vous faites

select x as y from table

puis rsmd.getColumnLabel() vous donnera également le nom du label récupéré.

157voto

Cyntech Points 1573

Je ne peux pas encore créer de commentaires, donc je poste ceci comme une réponse.

En plus des réponses ci-dessus, si vous travaillez avec une requête dynamique et que vous voulez les noms des colonnes mais que vous ne savez pas combien de colonnes il y a, vous pouvez utiliser l'objet ResultSetMetaData pour obtenir d'abord le nombre de colonnes et ensuite les parcourir.

Je modifie le code de 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 + 1; i++ ) {
  String name = rsmd.getColumnName(i);
  // Do stuff with name
}

20voto

simon Points 3999

Vous pouvez utiliser la fonction ResultSetMetaData ( http://java.sun.com/javase/6/docs/api/java/sql/ResultSetMetaData.html ) pour cela, comme ceci :

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

12voto

Ronald Weidner Points 181

Cette question est ancienne et les réponses précédentes correctes le sont également. Mais ce que je cherchais lorsque j'ai trouvé ce sujet était quelque chose comme cette solution. J'espère que cela aidera quelqu'un.

// 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<String> columnNames = new Vector<String>();

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

    }
  }
}

2voto

Deep Rathod Points 1

Import java.sql.* ;

public class JdbcGetColumnNames {

public static void main(String args[]) {
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/komal", "root", "root");

        st = con.createStatement();

        String sql = "select * from person";
        rs = st.executeQuery(sql);
        ResultSetMetaData metaData = rs.getMetaData();

        int rowCount = metaData.getColumnCount();

        System.out.println("Table Name : " + metaData.getTableName(2));
        System.out.println("Field  \tDataType");

        for (int i = 0; i < rowCount; i++) {
            System.out.print(metaData.getColumnName(i + 1) + "  \t");
            System.out.println(metaData.getColumnTypeName(i + 1));
        }
    } catch (Exception e) {
        System.out.println(e);
    }
}

}

Nom de la table : person Champ DataType id VARCHAR cname VARCHAR dob DATE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X