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
用于 rs
Và stmt2
用于 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á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ếu
Và lấ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/
Tôi là một lập trình viên xuất sắc, rất giỏi!