2010-04-10 2 views
71

Я использую CsvJdbc (это JDBC-драйвер для csv-файлов) для доступа к csv-файлу. Я не знаю, сколько столбцов содержит csv-файл. Как я могу получить количество столбцов? Есть ли для этого функция JDBC? Я не могу найти какие-либо методы для этого в java.sql.ResultSet.Как получить количество столбцов из набора результатов JDBC?

Для доступа к файлу я использую код, похожий на example на веб-сайте CsvJdbc.

ответ

199

Вы можете получить число столбцов из ResultSetMetaData:

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

int columnsNumber = rsmd.getColumnCount(); 
+0

Было бы интересно понять, как драйвер CSV JDBC и реализация 'ResultSetMetaData' обрабатывают записи CSV переменной длины. например Если вы указали 'SELECT * FROM sample', и каждая строка содержала другое количество полей, будет ли количество столбцов пересмотрено для каждой строки, которая была повторена? – 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 объясните свой код – Gwenc37

+0

Знает ли кто-нибудь? Метод 'rs.getMetaData()' дорогой? Он запрашивает базу данных каждый раз при ее вызове или нет? –

4

Количество в columns in the result set вы можете получить с кодом (как DB используется PostgreSQL):

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

Но вы можете получить больше мета-информации о колонках:

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

И, по крайней мере, не в последнюю очередь, вы можете получить информацию не только о таблице, но и о БД, как это сделать, вы можете найти here и here.

2

После establising соединения и выполнение запроса, попробуйте следующее:

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

Это будет печатать данные в столбцах и приходит на новую строку, как только последний столбец будет достигнут.

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

      } 
Смежные вопросы