¿Con java.sql.ResultSet
hay una manera de obtener el nombre de una columna como String
utilizando el índice de la columna? Eché un vistazo a través del documento API pero no puedo encontrar nada.Recuperar nombres de columna de java.sql.ResultSet
Respuesta
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.
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);
gracias me ayudó ... lo usé como: resultSet.getString (resultSet.findColumn ("nombre completo")) –
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
}
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);
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());
}
}
}
}
@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;
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";
}
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
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
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í
- 1. Obtener nombres de columna
- 2. Recuperar los nombres de fans de Facebook
- 3. ddply nombres de columna agregados
- 4. DataGridView Editar nombres de columna
- 5. LINQ: nombres de columna personalizados
- 6. Recuperar nombres de procesos en ejecución
- 7. JavaScript: ¿Recuperar nombres clave de un objeto?
- 8. Usando GetSchemaTable() para recuperar solo los nombres de las columnas
- 9. LINQ: Obtener nombres de columna de tabla
- 10. Entity Framework y nombres de columna de base de datos
- 11. Solr: ¿Recuperar nombres de campo de un índice de solr?
- 12. Alias para nombres de columna en Rails
- 13. nombres de columna Reordenar en I
- 14. Cómo citar nombres de columna con Zend_Db?
- 15. Oracle consulta a buscar nombres de columna
- 16. SQL dinámico para generar nombres de columna?
- 17. Nombres de columna dinámicos usando DIH (DataImportHandler)
- 18. Exportación SQLite con nombres de columna
- 19. Nombres de fila y columna en R
- 20. Hacer buenos nombres de columna R
- 21. Obtener lista de nombres de columna de una tabla vacía
- 22. C#: Recuperar nombres de protectores de pantalla instalados
- 23. Como recuperar espacios de nombres de archivos XML utilizando XPath
- 24. Cómo recuperar caracteres prohibidos para nombres de archivos, en Java?
- 25. Marco de la entidad intentar recuperar la columna inexistente
- 26. R Números como nombres de columna de Marcos de datos
- 27. inserción de identidad tsql sin lista de nombres de columna
- 28. Recuperar nombres de ADO conjunto de registros de campo (Classic ASP)
- 29. Impedir el truncamiento de sqlplus de los nombres de columna, sin formato de columna individual
- 30. Cómo recuperar nombres de pestañas de la hoja de Excel usando OpenXML
Ver también 'rsmd.getColumnLabel' si, recupera columnas con etiquetas (por ejemplo, SELECT columnName AS ColumnLabel' – T30
@ T30 - que es muy útil y yo' he modificado mi respuesta para reflejar su comentario –
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