내가 사용하고 CsvJdbc을 을 CSV 파일에 액세스하기 위해 (이 CSV - 파일에 대한 JDBC 드라이버입니다). csv 파일에 몇 개의 열이 있는지 모르겠습니다. 열 수를 어떻게 얻을 수 있습니까? 이것에 대한 JDBC 기능이 있습니까? java.sql.ResultSet에서 이에 대한 메소드를 찾을 수 없습니다.
파일에 액세스하기 위해 CsvJdbc 웹 사이트 의 예제 와 유사한 코드를 사용합니다 .
답변:
ResultSetMetaData 에서 열 번호를 가져올 수 있습니다 .
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
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));
rs.getMetaData()
방법은 비용이? 호출 될 때마다 데이터베이스를 쿼리합니까?
rs.getMetaData()
호출이 집중 될 수있다; 그러나 일단 개체가 있으면 rsmd
일반적으로 메타 데이터 개체에 대한 메서드를 호출 할 때 데이터베이스에 대한 추가 호출이 수행되지 않습니다. 모든 메타 데이터는 getMetaData 호출로 채워집니다.
코드로 얻을 수 있는 결과 집합 의 열 수 (DB는 PostgreSQL로 사용됨) :
// PostgreSQL 용 드라이버로드 Class.forName ( "org.postgresql.Driver"); 문자열 url = "jdbc : postgresql : // localhost / test"; 속성 props = new Properties (); props.setProperty ( "user", "mydbuser"); props.setProperty ( "password", "mydbpass"); 연결 conn = DriverManager.getConnection (url, props); // 문 만들기 문 stat = conn.createStatement (); // 결과 세트 얻기 ResultSet rs = stat.executeQuery ( "SELECT c1, c2, c3, c4, c5 FROM MY_TABLE"); // 결과 세트에서 메타 데이터 제공 ResultSetMetaData rsmd = rs.getMetaData (); // 메타 데이터 개체의 열 개수 int numOfCols = rsmd.getColumnCount ();
그러나 열에 대한 더 많은 메타 정보를 얻을 수 있습니다.
for(int i = 1; i <= numOfCols; i++)
{
System.out.println(rsmd.getColumnName(i));
}
이것은 데이터를 열로 인쇄하고 마지막 열에 도달하면 새 줄에옵니다.
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));
}
}
ResultSetMetaData
구현이 가변 길이 CSV 레코드를 처리 하는 방법을 이해하는 것은 흥미로울 것 입니다. 예를 들어 지정SELECT * FROM sample
하고 각 행에 서로 다른 수의 필드가 포함 된 경우 반복 된 각 행에 대해 열 개수가 재평가됩니까?