Tôi đang sử dụng đối tượng PreparedStatment java để xây dựng một loạt truy vấn INSERT theo đợt. Báo cáo kết quả truy vấn là các định dạng ...Cách sử dụng biến tablename cho câu lệnh chuẩn bị java chèn
String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
... vì vậy cả hai giá trị trường và tablename là các biến (ví dụ. Tôi có nhiều bảng với định dạng cùng một cột trong đó mỗi chèn sẽ được dẫn đến một cái khác). Tôi có thể thực hiện các hoạt động nếu tôi xóa "?" tablename biến và mã cứng nhưng mỗi câu lệnh chuẩn bị sẽ được chèn vào một bảng khác nhau nên cần phải duy trì một biến tôi cư ngay trước khi thực hiện truy vấn hàng loạt sử dụng ...
stmt.setString(1, "tableName1");
Làm thế nào tôi có thể để điều này trở thành một động biến xin vui lòng?
Cảm ơn mọi người ... có vẻ như tôi không biết tablename tôi muốn chèn vào cho đến khi trao đổi các biến cho mỗi hàng, điều tốt nhất là xây dựng chèn trong một thủ tục lưu sẵn DB. Sau đó chuyển tất cả các tham số cho mỗi hàng vào trong proc được lưu trữ, sau đó để cho DB xử lý thao tác tablename. Cảm ơn anyway folks cho các phản ứng mặc dù. :-) – ForestSDMC
Điều này có nghĩa là bảo vệ chống tiêm SQL là không thể với các tên bảng động? –
@Richard Tôi đã đi đến cùng một kết luận và nó có vẻ ngớ ngẩn, nhưng ít nhất nó là khá dễ dàng để kiểm tra tên bảng chống lại danh sách các bảng có sẵn trong cơ sở dữ liệu. – JulienD