2012-04-26 19 views
6

Tôi muốn viết một hàm java trong một truy vấn SQL và trả về một ResultSet để xử lý ở nơi khác. Điều này không thể được thực hiện như một ResultSet đã chết sau khi kết nối được đóng lại.CachedRowSet: nó vẫn có thể được sử dụng để giữ dữ liệu ResultSet?

Googling xung quanh tôi tìm thấy một VERY OLD (2004) OReilly article đã có một cái gì đó giống như chữa bệnh: CachedRowSet. Bạn chỉ cần thả vào ResultSet của bạn, CachedRowSet lưu dữ liệu, cho phép bạn đóng kết nối và chơi với dữ liệu ở nơi khác bằng CachedRowSet đã trả về.

Bài viết đề cập đến việc triển khai CachedRowSet bởi Sun, dường như không tìm thấy nơi nào.

javadocs hiện đại (cho Java 1.5 trở lên) dường như có một cái gì đó cùng tên, "CachedRowSet", đó không chỉ là một bộ dữ liệu ResultSet. Điều đó "CachedRowSet" dường như làm toàn bộ quá trình xử lý cơ sở dữ liệu từ việc kết nối và mọi thứ khác.

R THNG "CachedRowSet" có giống như được nói đến trong bài viết cũ không?

Tôi muốn một cái gì đó đơn giản, như trong bài viết cũ. Một cái gì đó để plop một ResultSet vào để xử lý sau khi conneciton được đóng lại.

Có con vật như vậy không?

Cảm ơn

Trả lời

-1

javax.sql.rowset.CachedRowSet chỉ đơn thuần là giao diện. Có một bản thực thi độc quyền Sun/Oracle, nhưng nó không được hỗ trợ và do đó rất nguy hiểm khi sử dụng.

Hầu hết các mã này đều theo mô hình "chuyển đổi sang pojos".

+0

MBFG; Tôi đang sử dụng Oracle và tôi đã hy vọng sử dụng điều này như một biện pháp tạm thời trong khi tôi dọn sạch một số mã cũ và tìm hiểu cách tốt hơn để làm mọi thứ (các khung cơ sở dữ liệu, v.v.). Tôi đã không thể tìm thấy bất cứ điều gì về nơi để có được nó, làm thế nào để sử dụng nó. Bất kỳ manh mối nào ngoài Google nhiều hơn? – Steve

+0

Làm thế nào để sử dụng pojos thay thế nhận được một "ResultSet" để di chuyển qua bên ngoài của chức năng mà nó đã thu được? – Steve

+1

Điều gì khiến bạn nghĩ rằng 'com.sun.rowset.CachedRowSetImpl' không được hỗ trợ? Giao diện [CachedRowSet] (http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html) là trong Java 7, và javadoc của nó nói rằng "việc thực hiện tham chiếu của giao diện CachedRowSet được cung cấp bởi Tập đoàn Oracle là việc triển khai chuẩn. Các nhà phát triển có thể sử dụng việc triển khai này giống như nó". Việc triển khai tham chiếu là 'com.sun.rowset.CachedRowSetImpl'; điều này nghe không được hỗ trợ cho tôi. –

-1

Nếu bạn chỉ muốn chuyển dữ liệu mà không cần tất cả các chức năng mà CachedRowSet cung cấp, bạn nên tắt dữ liệu tập kết quả trong Danh sách danh sách.

List<Object> list = new ArrayList<Object>(); 
    ResultSet rs = stmt.executeQuery("select * from myTable"); 
    while(rs.next()) { 
     List<Object> row = new ArrayList<Object>(); 
     row.add(rs.getObject(1)); 
     row.add(rs.getObject(2)); 
     row.add(rs.getObject(3)); 
     //And so on, or you can use the ResultSetMetaData to determine the number of columns 
     list.add(row); 
    } 
    rs.close(); 

Khi bạn hoàn tất, bạn có thể gửi đối tượng danh sách đó bất cứ nơi nào bạn muốn và sau đó lặp lại đối tượng đó để lấy dữ liệu.

4

CachedRowSet là giao diện Java chuẩn. Sun đã viết một triển khai tham chiếu và Sun/Oracle JDK contains it. Nếu bạn đang sử dụng một JDK khác, việc thực hiện khác hoặc có thể có hoặc không có sẵn.

Nếu bạn đã có ResultSet, thì bạn có thể điền một số CachedRowSet từ nó bằng phương pháp populate.

Nếu bạn đang suy nghĩ về phía trước đủ để sử dụng Java 7, thì bạn có thể lấy một phiên bản CachedRowSet theo cách di động, sử dụng phương thức RowSetFactory, có phương thức createCachedRowSet. Bạn có thể nhận được RowSetFactory từ số RowSetProvider (tất nhiên!).

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