JDBC ResultSet에서 열 수를 얻는 방법은 무엇입니까?


92

내가 사용하고 CsvJdbc을 을 CSV 파일에 액세스하기 위해 (이 CSV - 파일에 대한 JDBC 드라이버입니다). csv 파일에 몇 개의 열이 있는지 모르겠습니다. 열 수를 어떻게 얻을 수 있습니까? 이것에 대한 JDBC 기능이 있습니까? java.sql.ResultSet에서 이에 대한 메소드를 찾을 수 없습니다.

파일에 액세스하기 위해 CsvJdbc 웹 사이트 의 예제 와 유사한 코드를 사용합니다 .

답변:


250

ResultSetMetaData 에서 열 번호를 가져올 수 있습니다 .

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

int columnsNumber = rsmd.getColumnCount();

1
CSV JDBC 드라이버와 그 ResultSetMetaData구현이 가변 길이 CSV 레코드를 처리 하는 방법을 이해하는 것은 흥미로울 것 입니다. 예를 들어 지정 SELECT * FROM sample하고 각 행에 서로 다른 수의 필드가 포함 된 경우 반복 된 각 행에 대해 열 개수가 재평가됩니까?
rhu

@rhu 간단합니다. 메타 데이터는 현재 어떤 행에 있는지와 무관하기 때문에 그렇지 않습니다. 따라서 아마도 발견 된 최대 열 수입니다.
Marquis of Lorne

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

1
누군가 알고 있습니까? 인가 rs.getMetaData()방법은 비용이? 호출 될 때마다 데이터베이스를 쿼리합니까?
Fandi Susanto

rs.getMetaData()호출이 집중 될 수있다; 그러나 일단 개체가 있으면 rsmd일반적으로 메타 데이터 개체에 대한 메서드를 호출 할 때 데이터베이스에 대한 추가 호출이 수행되지 않습니다. 모든 메타 데이터는 getMetaData 호출로 채워집니다.
Mark Stewart

2
rsmd.getColumnName (1) 및 rsmd.getColumnTypeName (1)이어야하지 않습니까? 두 번째 열이 아닌 "첫 번째 열"을 인쇄합니다.
DAB

5

코드로 얻을 수 있는 결과 집합 수 (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));
}

그리고 최소한 테이블에 대한 정보뿐만 아니라 DB에 대한 정보도 여기여기에서 찾을 수 있습니다 .


4

연결을 설정하고 쿼리를 실행 한 후 다음을 시도하십시오.

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

            }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.