2010-04-10 13 views
71

Estoy usando CsvJdbc (es un controlador JDBC para archivos csv) para acceder a un archivo csv. No sé cuántas columnas contiene el archivo csv. ¿Cómo puedo obtener el número de columnas? ¿Hay alguna función JDBC para esto? No puedo encontrar ningún método para esto en java.sql.ResultSet.¿Cómo obtener el número de columnas de un ResultSet JDBC?

Para acceder al archivo, uso un código similar al example en el sitio web CsvJdbc.

Respuesta

199

Puede obtener el número de columnas de ResultSetMetaData:

Statement st = conn.createStatement(); 
ResultSet rs = st.executeQuery(query); 
ResultSetMetaData rsmd = rs.getMetaData(); 

int columnsNumber = rsmd.getColumnCount(); 
+0

Sería interesante entender cómo el controlador CSV JDBC y su implementación 'ResultSetMetaData' maneja los registros CSV de longitud variable. p.ej. Si ha especificado 'SELECT * FROM sample' y cada fila contiene un número diferente de campos, ¿se volverá a evaluar el recuento de columnas para cada fila sobre la que se iteraron? – rhu

5
PreparedStatement ps=con.prepareStatement("select * from stud"); 

ResultSet rs=ps.executeQuery(); 

ResultSetMetaData rsmd=rs.getMetaData(); 

System.out.println("columns: "+rsmd.getColumnCount()); 
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(2)); 
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(2)); 
+3

Plase explica tu código – Gwenc37

+0

¿Alguien sabe? ¿Es caro el método 'rs.getMetaData()'? ¿Consulta la base de datos cada vez que se llama o no? –

4

Número de un columns in the result set que puede obtener con el código (PostgreSQL como se utiliza DB):

 
//load the driver for PostgreSQL 
Class.forName("org.postgresql.Driver"); 

String url = "jdbc:postgresql://localhost/test"; 
Properties props = new Properties(); 
props.setProperty("user","mydbuser"); 
props.setProperty("password","mydbpass"); 
Connection conn = DriverManager.getConnection(url, props); 

//create statement 
Statement stat = conn.createStatement(); 

//obtain a result set 
ResultSet rs = stat.executeQuery("SELECT c1, c2, c3, c4, c5 FROM MY_TABLE"); 

//from result set give metadata 
ResultSetMetaData rsmd = rs.getMetaData(); 

//columns count from metadata object 
int numOfCols = rsmd.getColumnCount(); 

Pero usted puede conseguir más metainformaciones sobre columnas:

for(int i = 1; i <= numOfCols; i++) 
{ 
    System.out.println(rsmd.getColumnName(i)); 
} 

Y al menos pero no menos importante, puede obtener información no solo sobre la tabla, sino también sobre DB, cómo hacerlo puede encontrar here y here.

2

Después establising la conexión y la ejecución de la consulta intente esto:

ResultSet resultSet; 
int columnCount = resultSet.getMetaData().getColumnCount(); 
System.out.println("column count : "+columnCount); 
-1

Esto imprimirá los datos de las columnas y viene a nueva línea una vez que se alcanza la última columna.

ResultSetMetaData resultSetMetaData = res.getMetaData(); 
int columnCount = resultSetMetaData.getColumnCount(); 
for(int i =1; i<=columnCount; i++){ 
       if(!(i==columnCount)){ 

        System.out.print(res.getString(i)+"\t"); 
       } 
       else{ 
        System.out.println(res.getString(i)); 
       } 

      } 
Cuestiones relacionadas