2010-04-10 32 views
71

Tôi đang sử dụng CsvJdbc (đó là trình điều khiển JDBC cho tệp csv) để truy cập tệp csv. Tôi không biết bao nhiêu cột tệp csv chứa. Làm thế nào tôi có thể nhận được số cột? Có chức năng JDBC nào không? Tôi không thể tìm thấy bất kỳ phương pháp cho điều này trong java.sql.ResultSet.Làm cách nào để lấy số lượng cột từ một ResultSet JDBC?

Để truy cập tệp, tôi sử dụng mã tương tự như example trên trang web CsvJdbc.

Trả lời

199

Bạn có thể lấy cột số từ ResultSetMetaData:

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

int columnsNumber = rsmd.getColumnCount(); 
+0

Sẽ rất thú vị khi hiểu cách trình điều khiển JDBC CSV và triển khai 'ResultSetMetaData' xử lý các bản ghi CSV có độ dài thay đổi. ví dụ. Nếu bạn đã chỉ định 'SELECT * FROM sample' và mỗi hàng chứa một số trường khác nhau, liệu số cột có được đánh giá lại cho mỗi hàng đã được lặp lại không? – 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 giải thích mã của bạn – Gwenc37

+0

Có ai biết không? Phương thức 'rs.getMetaData()' có đắt không? Nó có truy vấn cơ sở dữ liệu mỗi khi nó được gọi hay không? –

4

Số một columns in the result set bạn có thể nhận được với mã (như DB được sử dụng 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(); 

Nhưng bạn có thể nhận được thêm thông tin meta về các cột:

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

Và ít nhất nhưng không kém phần quan trọng, bạn có thể nhận được một số thông tin không chỉ về bảng mà còn về DB nữa, làm thế nào để làm điều đó bạn có thể tìm thấy herehere.

2

Sau establising kết nối và thực hiện truy vấn thử này:

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

này sẽ in các dữ liệu trong các cột và đi kèm với dòng sản phẩm mới một lần cột cuối cùng là đạt.

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

      } 
Các vấn đề liên quan