2013-05-18 236 views
18

Tôi có một câu hỏi liên quan đến phương thức này: st.execute(sql); trong đó st rõ ràng là một đối tượng Statement. Trực tiếp từ this oracle java hướng dẫn:Statement.execute (sql) vs executeUpdate (sql) và executeQuery (sql)

thực hiện: Trả về true nếu đối tượng đầu tiên mà truy vấn trả về là một đối tượng ResultSet. Sử dụng phương pháp này nếu truy vấn có thể trả về một hoặc đối tượng ResultSet khác. Truy xuất các đối tượng ResultSet được trả lại từ truy vấn bằng cách gọi hàm Statement.getResutSet nhiều lần.

nghĩa là gì "một hoặc ResultSet nhiều đối tượng"? Làm cách nào để quản lý chúng sau khi nhận được một mảng ResultSet? Trong khi đó, st.executeQuery(sql)st.executeUpdate(sql) rất rõ ràng. Nó không phải (ít nhất là với tôi) mục đích của st.execute(sql) mà cũng có thể trả về một int như thể nó đã được cập nhật một bảng.

Cảm ơn trước

Trả lời

8

sao họ có ý nghĩa gì bởi "một hoặc nhiều đối tượng ResultSet"?

Các javadoc cho phương pháp execute nói điều này:.

"Thực thi các câu lệnh SQL đưa ra, trong đó có thể trả về nhiều kết quả Trong một số tình huống (không phổ biến), một câu lệnh SQL duy nhất có thể trả về kết quả nhiều bộ và/hoặc số lượng bản cập nhật. Thông thường bạn có thể bỏ qua điều này trừ khi bạn là (1) thực hiện một thủ tục lưu trữ mà bạn biết có thể trả về nhiều kết quả hoặc (2), bạn được tự động thực hiện một chuỗi SQL rõ. "

Điều đó khá nhiều giải thích nó. Đôi khi truy vấn có thể phân phối nhiều hơn một số ResultSet.

nếu có thể quản lý chúng như thế nào sau khi có một chuỗi ResultSet?

Tôi không chắc chắn những gì bạn có ý nghĩa nhưng:

  • bạn không thể nhận chúng như một mảng: bạn phải nhận được chúng cùng một lúc, và
  • bạn có thể đặt resultsets vào một mảng ...

nó không (ít nhất là với tôi) mục đích st.execute (sql) mà cũng có thể trả về một int như thể nó đã được cập nhật một bảng.

Một lần sử dụng execute là thực thi câu lệnh SQL nếu bạn không biết đó là truy vấn, cập nhật (loại nào đó) ... hay cái gì khác có khả năng phân phối nhiều tập kết quả. Đó là tổng quát của executeQuery()executeUpdate() ...

+1

(Lưu ý cho biên tập viên - Tôi cố tình sử dụng các khối báo giá và nghiêng cùng cho công cụ đó được trích dẫn từ một tài liệu dứt khoát, và chỉ trích dẫn khối cho các trích dẫn từ câu hỏi hoặc bình luận gốc. Vui lòng không can thiệp vào định dạng. Nếu bạn gặp sự cố khi đọc chữ nghiêng trong trình duyệt, thay đổi phông chữ mặc định hoặc kích thước văn bản ...) –

3

thực thi boolean(): Thực hiện câu lệnh SQL trong đối tượng Statement đã được chuẩn bị này, có thể là bất kỳ loại câu lệnh SQL nào.

ResultSet executeQuery(): Thực hiện truy vấn SQL trong đối tượng Statement đã được chuẩn bị này và trả về đối tượng ResultSet do truy vấn tạo ra.

int executeUpdate(): Thực thi câu lệnh SQL trong đối tượng Statement đã được chuẩn bị này, phải là câu lệnh SQL INSERT, UPDATE hoặc DELETE; hoặc một câu lệnh SQL trả về không có gì, chẳng hạn như một câu lệnh DDL.

Nơi tốt nhất để tìm câu trả lời cho những câu hỏi như thế này là Javadocs: Here

+0

Liên kết cho javadocs phải là http: // docs. oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html –