Tôi đã xem và không thể tìm thấy câu trả lời cho thử thách sau đây mà tôi đang gặp phải. Nó có vẻ khá đơn giản nhưng tôi đã không thể giải quyết nó.Cách sử dụng danh sách mảng làm thông số câu lệnh đã chuẩn bị
Tôi có ArrayList
của id bản ghi là loại Long
->ArrayList<Long>
. Tôi muốn sử dụng danh sách các id hồ sơ này để chọn các hàng từ một bảng khác. Càng xa càng tốt. Bây giờ vào thử thách ...
a) Tôi đang sử dụng câu lệnh đã chuẩn bị để chọn dữ liệu từ bảng sử dụng ArrayList
làm đầu vào cho việc này.
selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Câu hỏi về thông số trên phải được xác định như thế nào? Ở trên dường như không chính xác cho thông số loại ArrayList
.
b) Tôi cũng gặp sự cố khi đặt giá trị tham số cho câu lệnh được chuẩn bị . Không có phương pháp nào để đặt giá trị loại ArrayList
và tôi không thấy tùy chọn nào khác khả thi .
---> selectPS.set?????(1, arraylistParameter);
ResultSet rs = selectPS.executeQuery();
Bất kỳ trợ giúp hoặc hướng nào bạn có thể đặt cho tôi đều được đánh giá cao.
Cảm ơn bạn.
** Bạn có thể thử truyền một mảng không? **, [PreparedStatement # setArray()] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html # setArray (int, java.sql.Array))? Bạn cần phải tạo một mảng đầu tiên bằng cách sử dụng [Connection # createArrayOf()] (http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#createArrayOf (java.lang.String, java.lang.Object [])). Có một số cách được liệt kê [ở đây] (http://www.javaranch.com/journal/200510/Journal200510.jsp#a2). – NINCOMPOOP
Tôi sẽ tự động tạo một String với '?' Cho mỗi phần tử trong mảng, gọi phương thức 'setLong' với mỗi giá trị, tăng chỉ số mỗi lần. –
@Thomas Grady CBIP Cơ sở dữ liệu của bạn là gì? Nếu đó là Oracle, thì sẽ không hỗ trợ hơn 1000 bản ghi trong mệnh đề 'IN'. Bạn phải viết mệnh đề INNER JOIN để biết thêm thông tin - http://stackoverflow.com/questions/4722220/sql-in-clause-1000- item-limit – Prabhaker