2010-10-15 24 views
20

rs, một thể hiện của java.sql.ResultSet, cách kiểm tra xem nó có chứa cột có tên là "theColumn" không?Làm cách nào để kiểm tra xem ResultSet có chứa một trường được đặt tên cụ thể không?

+2

thể trùng lặp của [Làm thế nào tôi có thể xác định tên cột tồn tại trong ResultSet?] (Http://stackoverflow.com/questions/3599861/how-can-i-determine-if-the- column-name-exist-in-the-resultset) – Riduidel

+0

bản sao có thể có của [Làm cách nào để kiểm tra xem liệu tên cột có tồn tại trong một CachedRowSet không?] (http://stackoverflow.com/questions/462534/how-do- i-check-to-see-if-a-cột-tên-tồn tại-trong-một-cachedrowset) – bluish

Trả lời

26

Bạn có thể sử dụng ResultSetMetaData để lặp qua các cột ResultSet và xem nếu cột tên khớp với tên cột được chỉ định của bạn.

Ví dụ:

ResultSetMetaData rsMetaData = rs.getMetaData(); 
int numberOfColumns = rsMetaData.getColumnCount(); 

// get the column names; column indexes start from 1 
for (int i = 1; i < numberOfColumns + 1; i++) { 
    String columnName = rsMetaData.getColumnName(i); 
    // Get the name of the column's table name 
    if ("theColumn".equals(columnName)) { 
     System.out.println("Bingo!"); 
    } 
} 
+2

@Ivan, lưu ý rằng có một số phức tạp nếu bạn sử dụng bí danh (SELECT col AS foo). http://bugs.mysql.com/bug.php?id=43684 –

+1

@JoshuaMartell, 'ResultSetMetaData.getColumnLabel' có thể được sử dụng nếu muốn nhận tên như được xác định bởi mệnh đề' AS' của truy vấn SQL – Santosh

13

Hãy thử sử dụng các phương pháp ResultSet#findColumn(String)

private boolean isThere(ResultSet rs, String column) 
{ 
    try 
    { 
    rs.findColumn(column); 
    return true; 
    } catch (SQLException sqlex) 
    { 
    logger.debug("column doesn't exist {}", column); 
    } 
    return false; 
} 
+0

Không phải là trường hợp ngoại lệ chậm? – Ivan

+3

Nó có thể được so sánh với việc thực thi Java thông thường. Hãy nhớ rằng thường tắc nghẽn không phải là mã Java nhưng các thins đang chạy ở phía bên kia - cơ sở dữ liệu. Hầu hết có thể thực hiện truy vấn và vận chuyển dữ liệu là ít đơn đặt hàng của cường độ chậm hơn so với xử lý ngoại lệ. –

+0

Phương pháp TIS hoạt động tốt với các bí danh trong mysql. – bancer

3

Bạn có thể làm:

rs.findColumn("theColum") 

và kiểm tra các SQLException

+0

Vâng, cách dễ nhất tôi nghĩ là cố gắng truy lục cột này theo cách này hay cách khác và bắt ngoại lệ. – Jay

+1

đây thường là một giải pháp tồi vì bạn đang cố tình ném một ngoại lệ cho trường hợp phổ biến, ném ngoại lệ cho trường hợp hiếm hoi và tốn kém về tài nguyên –

0

Sử dụng các đối tượng ResultSetMetaData được cung cấp bởi các đối tượng ResultSet qua rs.getMetaData()

2

Sử dụng lớp ResultSetMetaData.

public static boolean hasColumn(ResultSet rs, String columnName) throws SQLException { 
    ResultSetMetaData rsmd = rs.getMetaData(); 
    int columns = rsmd.getColumnCount(); 
    for (int x = 1; x <= columns; x++) { 
     if (columnName.equals(rsmd.getColumnName(x))) { 
      return true; 
     } 
    } 
    return false; 
} 
Các vấn đề liên quan