cuốn sách gpt4 ai đã làm

java - Lấy hai giá trị ResultSet sẽ xóa cả hai ResultSets ngay cả khi sử dụng các đối tượng Statement khác nhau

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 11:48:20 28 4
mua khóa gpt4 Nike

Tôi đã thử tìm kiếm trên Google và xem các chủ đề này trên SO:

java jdbc truy cập nhiều tập kết quả
Mở hai tập kết quả cùng một lúc
JDBC trả về tập kết quả trống
JDBC trả về một Tập kết quả trống (rs.isBeforeFirst() == true) mặc dù bảng không trống

Và tất cả chúng đều không liên quan.

tìm kiếm trống riêng tưStocks(){
rs=stmt.executeQuery("select * from table1;"); //ResultSet rs; Câu lệnh stmt;
rs2=stmt2.executeQuery("select * from table2;"); //ResultSet rs2;
while (rs.next()){ //phương thức next() trả về sai
while(rs2.next()){

}
}
}

đây rs Nó trống nếu LINE 2 được thực thi. Tuy nhiên, nếu LINE 2 bị loại bỏ, rs có giá trị. Tôi đang sử dụng hai đối tượng Tuyên bố khác nhau, vì vậy rs Không đóng khi LINE 2 được thực thi. (stmt 用于 rsstmt2 用于 rs2)

Tôi sử dụng giống nhau cho cả hai Sự liên quan sự vật. Tôi đã làm gì sai? Có cách nào để làm điều này mà không cần sử dụng SQL JOIN không?

(Đây là tuyên bố bạn cần)

Kết nối con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","test");
Câu lệnh stmt=con.createStatement();
Câu lệnh stmt2=con.createStatement();

gia hạn
Tôi cũng đã thử sử dụng các đối tượng kết nối khác nhau cho cùng một cơ sở dữ liệu:

            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","test");            
con2=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","test");
stmt=con.createStatement();
stmt2=con2.createStatement();


Một lần nữa không có kết quả.

更新 2
(Đáp lại bình luận của @sidgate)

kết quả riêng tư rs=null;
kết quả riêng tư rs2=null;

Cập nhật 3
(Phiên bản mcve của toàn bộ phương thức được đề cập; tên định danh thực tế tôi sử dụng trong mã vẫn giữ nguyên nhưng đã được thay đổi trong đoạn mã ở trên để thuận tiện cho người đọc)

tìm kiếm trống riêng tưStocks(){        
Truy vấn chuỗi=jTextField8.getText().trim();

thử {
if (query.equals("Tìm kiếm cổ phiếu")||query.length()==0){
rs=stmt.executeQuery("select * from masterstocks;");
rs2=stmt2.executeQuery("select * from userstock_"+getUsernameFromEmail(loginEmail)+";");
}
khác{
rs=stmt.executeQuery("select * from masterstocks có tên như \"%"+query+"%\" hoặc ký hiệu như \"%"+query+"%\";");
rs2=stmt2.executeQuery("select * from userstock_"+getUsernameFromEmail(loginEmail)+" trong đó tên như \"%"+query+"%\" hoặc ký hiệu như \"%"+query+"%\";");
}
while (rs.next()){
//chất liệu
if (jCheckBox3.isSelected()){
rs2.b BeforeFirst();
while(rs2.next()){
//chất liệu
}
}
}
}
} catch (SQLException ex) {
ex.printStackTrace();
showSQLError();
}
}

câu trả lời hay nhất

Các biến Kết quả nên được sử dụng trong một truy vấn duy nhất trong phạm vi của chúng. Theo câu hỏi của bạn, biến ResultSet được xác định ở cấp lớp và theo hai phương thức khác nhau tìm kiếmCổ phiếulấy tên người dùngTừEmail Tái sử dụng trung bình. Để tránh điều này, hãy xác định các biến trong phạm vi phương thức.

Về java - nhận được hai giá trị ResultSet sẽ xóa cả hai ResultSets ngay cả khi sử dụng các đối tượng Statement khác nhau, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/37101534/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress