2009-11-23 32 views

Trả lời

12

Mùa xuân có một đối tượng DatabaseMetaDataCallback có thể xử lý một số khía cạnh tấm nồi hơi của giải pháp mà duffymo có liên quan đến. Sau đó, bạn có thể chuyển đối tượng đó khi gọi JDBCUtils.extractDatabaseMetaData.

Ví dụ về việc thực hiện cùng một cuộc gọi mà bạn đang cố thực hiện với các lớp đó có thể được tìm thấy here.

Mẫu mã từ liên kết đó:

Class:

class GetTableNames implements DatabaseMetaDataCallback { 

     public Object processMetaData(DatabaseMetaData dbmd) throws SQLException { 
      ResultSet rs = dbmd.getTables(dbmd.getUserName(), null, null, new String[]{"TABLE"}); 
      ArrayList l = new ArrayList(); 
      while (rs.next()) { 
       l.add(rs.getString(3)); 
      } 
      return l; 
     } 
    } 

Cách sử dụng:

GetTableNames getTableNames = new GetTableNames(); 
try { 
    Object o = JdbcUtils.extractDatabaseMetaData(dataSource, getTableNames); 
    System.out.println(o); 
} catch (MetaDataAccessException e) { 
    System.out.println(e); 
} 
+2

+1 từ tôi - đây là câu trả lời hay nhất cho đến nay. Tốt đẹp. – duffymo

4

Bạn luôn được tự do lấy java.sql.DatabaseMetaData bằng kết nối. Không có bất kỳ phương thức nào trong SimpleJdbcTemplate để giúp bạn, nhưng thẳng thắn không cần.

DatabaseMetaData md = c.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 
+0

Có thể là các khía cạnh lò xo là quan trọng do tương tác quản lý giao dịch hoặc một cái gì đó. – bmargulies

+1

Tôi sẽ không nghĩ rằng giao dịch là cần thiết cho một hoạt động chỉ đọc như thế này. Vấn đề duy nhất có thể là nếu ai đó thay đổi giản đồ trong khi bạn thực hiện thao tác theo cách mà kết quả bị vô hiệu. Nếu điều đó có thể xảy ra, bạn đã có những vấn đề lớn hơn nhiều. – duffymo

+1

Liên kết đó hiện đang chuyển hướng đến một trang web giả mạo – Justin

1

Truy vấn chế độ xem USER_TABLES và bạn sẽ nhận được chúng.

poke xung quanh trong sqlplus, tất nhiên, để xem hình dạng đầu tiên.

+0

Theo kinh nghiệm của tôi, các "bảng" của ứng dụng thường là từ đồng nghĩa với các bảng trong lược đồ khác, vì vậy bạn có thể phải truy vấn ALL_TABLES. – Dan

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