2011-05-10 38 views
5

Ứng dụng Java của tôi cần giữ con trỏ đến Oracle DB trong một thời gian. Trong khi đó các câu lệnh DB khác phải được thực hiện. Điều này có yêu cầu các kết nối DB riêng biệt hay giống nhau (con trỏ của con trỏ) có thể được sử dụng không?Oracle DB có hỗ trợ nhiều hoạt động (song song) cho mỗi kết nối không?

Cảm ơn.

+0

bạn đã thử chưa? những gì kết quả đã cung cấp cho? – Mat

+0

không, tôi không có. chưa – Ralkie

+0

Bạn đang nói về loại ứng dụng Java nào? Oracle là hoàn toàn tốt đẹp với các phiên chuyên dụng mà xử lý một loạt các báo cáo. Tuy nhiên, hầu hết các ứng dụng Java là các ứng dụng web và các ứng dụng web thường sử dụng các giao thức * không trạng thái * và kết nối tổng hợp; điều này có nghĩa là rất khó để đặt trước một phiên cơ sở dữ liệu cho một người dùng cụ thể để ra lệnh trong một khoảng thời gian. Vì vậy, chi tiết xin vui lòng. Bạn cũng có nghĩa là "song song" * hay nên là "tuần tự"? Oracle hỗ trợ truy vấn song song/DML nhưng nó là một câu hỏi khác. – APC

Trả lời

5

Hạn chế duy nhất là một câu lệnh duy nhất chỉ có thể có một ResultSet duy nhất tại một thời điểm nhất định. Lưu ý rằng một tuyên bố thể sản xuất nhiều resultsets nhưng bạn phải truy cập chúng liên tục (sử dụng getNextResult())

Để có thể có nhiều mở resultsets/Cursors bạn cần nhiều java.sql.Statement đối tượng.

Một kết nối duy nhất chỉ có thể có một tuyên bố hoạt động đơn lẻ (tức là đang chạy). Vì vậy, nếu bạn cần nhiều con trỏ mở (ResultSets), bạn cần phải chạy chúng tuần tự (lần lượt cái khác) với mỗi đối tượng Statement của riêng chúng.

3

Oracle không có vấn đề gì với những gì mà người MSSQL gọi là MARS (Nhiều bộ kết quả hoạt động).

Bạn có thể thấy hình thức này mà trong rất nhiều mã PL/SQL, và cho rằng vấn đề PL/SQL là "chỉ là" một khách hàng đến cơ SQL như là mã Java của bạn:

for a in (select field1, field2 from table1) loop 
    for b in (select * from table2 where SomeField = a.Field1) loop 
    ... 
    end loop; 
end loop; 

Tuy nhiên, đừng dùng từ ngữ của tôi. Bạn có thể tạo một vòng lặp lồng nhau như thế này trong Java.

0

Bạn có thể sử dụng khái niệm tổng hợp cơ sở dữ liệu.

Click Here

Nó cung cấp một hồ bơi của các kết nối cơ sở dữ liệu để bất cứ khi nào cần thiết, bạn có thể có được một kết nối cơ sở dữ liệu từ hồ bơi.

Nó cũng là bộ nhớ được tối ưu hóa vì kết nối cơ sở dữ liệu và đóng là một quá trình nặng.

+0

Toàn bộ điểm của câu hỏi là OP không muốn nhiều kết nối, nhưng, muốn biết liệu anh ta có thể thực thi các sqls khác cùng lúc với việc giữ con trỏ mở - mà anh ta có thể! –

+0

Có, tôi có thể (và có thể sẽ) sử dụng tổng hợp, nhưng, như James đã chỉ ra, câu hỏi là về việc sử dụng cùng một kết nối. – Ralkie

1

Tất nhiên bạn có thể giữ nhiều con trỏ đang mở trong khi bạn đang phát hành các truy vấn khác trên cùng một kết nối. Tuy nhiên, không thể đưa ra các truy vấn hoặc câu lệnh khác trong khi con trỏ đầu tiên được mở. Đó là bởi vì chỉ có một yêu cầu có thể được kích hoạt (tức là thực thi ong) trong một phiên Oracle tại bất kỳ thời điểm nào.

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