2009-03-30 13 views

Respuesta

290

Puede obtener esta información del ResultSet metadatos. Ver ResultSetMetaData

p.

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

y puede obtener el nombre de la columna desde allí. Si lo hace

select x as y from table 

continuación rsmd.getColumnLabel() le dará el nombre de la etiqueta recuperada también.

+14

Ver también 'rsmd.getColumnLabel' si, recupera columnas con etiquetas (por ejemplo, SELECT columnName AS ColumnLabel' – T30

+2

@ T30 - que es muy útil y yo' he modificado mi respuesta para reflejar su comentario –

+8

Puede sorprenderme ver el conteo de columnas comenzando en 1. Puede repetir los nombres de las columnas con 'for (int i = 1; i <= rsmd.getColumnCount(); i ++) String name = rsmd.getColumnName (i); ' – Alphaaa

16

Puede utilizar el objeto de la ResultSetMetaData (http://java.sun.com/javase/6/docs/api/java/sql/ResultSetMetaData.html) para que, de esta manera:

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

gracias me ayudó ... lo usé como: resultSet.getString (resultSet.findColumn ("nombre completo")) –

116

Además de las respuestas anteriores, si estás trabajando con una consulta dinámica y desea que los nombres de columna, pero no sé cuántas columnas hay, puede usar el objeto ResultSetMetaData para obtener primero el número de columnas y luego recorrerlas.

Ammending código 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; i++) { 
    String name = rsmd.getColumnName(i); 
    // Do stuff with name 
} 
+0

¿no es así? for (int i = 1; i <= columnCount + 1; i ++) {...} – Martin

+3

@Martin No, porque intentará obtener la Columna n + 1 que no existe. Si quieres ser absolutamente conciso, entonces sería 'i <= columnCount'. – Cyntech

1

Las sentencias SQL que se leen datos de una consulta de base de datos devolver los datos en un conjunto de resultados. La instrucción SELECT es la forma estándar de seleccionar filas de una base de datos y verlas en un conjunto de resultados. La interfaz **java.sql.ResultSet** representa el conjunto de resultados de una consulta de base de datos.

  • métodos Get: utilizados para visualizar los datos en las columnas de la fila actual siendo apuntado por el cursor.

Usando MetaData of a result set to fetch the exact column count

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

http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html

y más aún para obligar a éste a la mesa modelo de datos

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    try{ 
     //STEP 2: Register JDBC driver 
     Class.forName("com.mysql.jdbc.Driver"); 

     //STEP 3: Open a connection 
     System.out.println("Connecting to a selected database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 
     System.out.println("Connected database successfully..."); 

     //STEP 4: Execute a query 
     System.out.println("Creating statement..."); 
     stmt = conn.createStatement(); 

     String sql = "SELECT id, first, last, age FROM Registration"; 
     ResultSet rs = stmt.executeQuery(sql); 
     //STEP 5: Extract data from result set 
     while(rs.next()){ 
     //Retrieve by column name 
     int id = rs.getInt("id"); 
     int age = rs.getInt("age"); 
     String first = rs.getString("first"); 
     String last = rs.getString("last"); 

     //Display values 
     System.out.print("ID: " + id); 
     System.out.print(", Age: " + age); 
     System.out.print(", First: " + first); 
     System.out.println(", Last: " + last); 
     } 
     rs.close(); 
    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
     if(stmt!=null) 
      conn.close(); 
     }catch(SQLException se){ 
     }// do nothing 
     try{ 
     if(conn!=null) 
      conn.close(); 
    }catch(SQLException se){ 
     se.printStackTrace(); 
     }//end finally try 
    }//end try 
     System.out.println("Goodbye!"); 
    }//end main 
    }//end JDBCExample 

muy buen tutorial aquí: http://www.tutorialspoint.com/jdbc/

ResultSetMetaData meta = resultset.getMetaData(); // for a valid resultset object after executing query 

    Integer columncount = meta.getColumnCount(); 

    int count = 1 ; // start counting from 1 always 

    String[] columnNames = null; 

    while(columncount <=count){ 

    columnNames [i] = meta.getColumnName(i); 

    } 

    System.out.println (columnNames.size()); //see the list and bind it to TableModel object. the to your jtbale.setModel(your_table_model); 
7

Esta pregunta es antigua y también lo son las respuestas anteriores correctas. Pero lo que estaba buscando cuando encontré este tema fue algo así como esta solución. Espero que ayude a alguien.

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

    } 
    } 
} 
0

@Cyntech es correcto.

En caso que su mesa está vacía y todavía se necesita para obtener los nombres de columna de la tabla se puede obtener su columna de tipo vectorial, ver lo siguiente:

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

Vector<Vector<String>>tableVector = new Vector<Vector<String>>(); 
boolean isTableEmpty = true; 
int col = 0; 

while(rs.next()) 
    { 
     isTableEmpty = false; //set to false since rs.next has data: this means the table is not empty 
     if(col != columnCount) 
      { 
      for(int x = 1;x <= columnCount;x++){ 
       Vector<String> tFields = new Vector<String>(); 
       tFields.add(rsmd.getColumnName(x).toString()); 
       tableVector.add(tFields); 
      } 
      col = columnCount; 
      } 
    } 


     //if table is empty then get column names only 
    if(isTableEmpty){ 
     for(int x=1;x<=colCount;x++){ 
      Vector<String> tFields = new Vector<String>(); 
      tFields.add(rsmd.getColumnName(x).toString()); 
      tableVector.add(tFields); 
     } 
     } 

rs.close(); 
stmt.close(); 

return tableVector; 
0
ResultSet rsTst = hiSession.connection().prepareStatement(queryStr).executeQuery(); 
ResultSetMetaData meta = rsTst.getMetaData(); 
int columnCount = meta.getColumnCount(); 
// The column count starts from 1 

String nameValuePair = ""; 
while (rsTst.next()) { 
    for (int i = 1; i < columnCount + 1; i++) { 
     String name = meta.getColumnName(i); 
     // Do stuff with name 

     String value = rsTst.getString(i); //.getObject(1); 
     nameValuePair = nameValuePair + name + "=" +value + ","; 
     //nameValuePair = nameValuePair + ", "; 
    } 
    nameValuePair = nameValuePair+"||" + "\t"; 
} 
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); 
     } 
    } 
} 

Nombre de tabla: Persona Campo Tipo de datos ID VARCHAR CNAME VARCHAR dob FECHA

0

Cuando se necesita el co lumna nombres, pero no quieren agarrar entradas:

PreparedStatement stmt = connection.prepareStatement("SHOW COLUMNS FROM `yourTable`"); 

ResultSet set = stmt.executeQuery(); 

//store all of the columns names 
List<String> names = new ArrayList<>(); 
while (set.next()) { names.add(set.getString("Field")); } 

NOTA: Sólo funciona con MySQL

3

SQLite 3

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

EDIT: Esto funciona con PostgreSQL, así

Cuestiones relacionadas