Używam CsvJdbc (jest to sterownik JDBC dla plików csv), aby uzyskać dostęp do pliku csv. Nie wiem, ile kolumn zawiera plik CSV. Jak mogę sprawdzić liczbę kolumn? Czy jest do tego jakaś funkcja JDBC? Nie mogę znaleźć żadnej metody na to w java.sql.ResultSet.
Aby uzyskać dostęp do pliku, używam kodu podobnego do przykładu na stronie CsvJdbc.
ResultSetMetaData
implementacja obsługują rekordy CSV o zmiennej długości. np. jeśli określiłeśSELECT * FROM sample
i każdy wiersz zawierał inną liczbę pól, czy liczba kolumn zostanie ponownie obliczona dla każdego wiersza, który został poddany iteracji?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(1)); System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1));
źródło
rs.getMetaData()
metoda jest droga? Czy wysyła zapytanie do bazy danych za każdym razem, gdy jest wywoływana, czy nie?rs.getMetaData()
Połączenie może być intensywny; ale kiedy już masz obiekt,rsmd
zwykle nie są wykonywane żadne dodatkowe wywołania bazy danych podczas wywoływania metod na obiekcie metadanych; wszystkie metadane są wypełniane wywołaniem getMetaData.Liczba kolumn w zestawie wyników, które można uzyskać za pomocą kodu (ponieważ DB jest używany jako PostgreSQL):
Ale możesz uzyskać więcej metainformacji o kolumnach:
for(int i = 1; i <= numOfCols; i++) { System.out.println(rsmd.getColumnName(i)); }
I przynajmniej, ale nie mniej ważne, możesz uzyskać informacje nie tylko o tabeli, ale także o DB, jak to zrobić, możesz znaleźć tutaj i tutaj .
źródło
Po nawiązaniu połączenia i wykonaniu zapytania spróbuj tego:
ResultSet resultSet; int columnCount = resultSet.getMetaData().getColumnCount(); System.out.println("column count : "+columnCount);
źródło
Spowoduje to wydrukowanie danych w kolumnach i przejście do nowej linii po osiągnięciu ostatniej kolumny.
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)); } }
źródło