Tôi có câu lệnh SQL sau:chèn một chuỗi để một tuyên bố chuẩn bị mà không cần ''
Select i.imageID, theImage, translationRating
From images i
inner join translationchains t
on t.imageId = i.imageid
where i.userID=(someUserID) And i.translated =0
and t.targetLang in (select targetLang from translationChains)
tôi muốn làm cho nó một tuyên bố chuẩn bị để sử dụng trong mã java của tôi:
Select i.imageID, theImage, translationRating
From images i
inner join translationchains t
on t.imageId = i.imageid
where i.userID=? And i.translated =0
and t.targetLang in (select ? from translationChains)
sự đầu vào cho đầu tiên? là một Id người dùng (số nguyên) và nó hoạt động tốt.
đầu vào thứ hai là một chuỗi mà chứa một languageId - đó là một chuỗi mà một trong hai chứa một số đại diện cho một ngôn ngữ, hoặc chuỗi "targetLang" đó là tên của cột (= tất cả langs)
trong mã java của tôi, tôi đã làm như sau:
Image.setInt(1, userID);
Image.setString(2, langID);
Image.executeQuery()
vấn đề của tôi là khi tôi gửi chuỗi "targetLang" như tham số thứ hai tuyên bố chuẩn bị được chèn nó như 'targetLang' (với 'trước và sau '), với các con số không phải là một vấn đề beacuse 3 =' 3 ', nhưng với chuỗi nó cho tôi kết quả khác nhau từ những gì tôi cần - Tôi luôn nhận được một tập kết quả trống vì không có gì bằng 'targetLang'. Tôi cần phải chèn chuỗi này vào câu lệnh đã chuẩn bị mà không có '. là nó có thể hoặc tôi cần phải sử dụng một cái gì đó khác với tuyên bố chuẩn bị?
Tôi biết tôi có thể xây dựng một chuỗi có chứa tất cả các truy vấn này nhưng tôi đang tìm kiếm cái gì thanh lịch hơn tnx
chỉnh sửa:
Đây là Tạo translationChains bảng:
Create Table if not exists TranslationChains (
ImageID int (10) NOT NULL,
SourceLang int NOT NULL,
TargetLang int NOT NULL,
Translated tinyint default 0,
Translation text,
Translator varchar (30),
CONSTRAINT translate_image PRIMARY KEY (ImageID,SourceLang, TargetLang),
FOREIGN KEY (ImageID) REFERENCES Images(ImageID) ON DELETE CASCADE,
FOREIGN KEY (SourceLang) REFERENCES Languages(languageID) ON DELETE CASCADE,
FOREIGN KEY (TargetLang) REFERENCES Languages(languageID) ON DELETE CASCADE)
Như bạn thấy, tôi đang cố gắng chụp ảnh theo cột "targetLang" ich là một cột int. Mỗi số đại diện cho một ngôn ngữ.
Bây giờ tôi có hai lựa chọn trong việc lựa chọn hình ảnh từ bảng:
- Chọn một ngôn ngữ cụ thể, ví dụ: đưa ra một số như là đầu vào thứ hai.
- Chọn tất cả ngôn ngữ, tức là đặt đầu vào thứ hai thành tên cột "targetLang".
Vì vậy, tôi không so sánh với chuỗi cố định "targetLang". Tôi muốn chọn tất cả các giá trị có thể cho cột này (chọn targetLang từ translationChains).
tnx, nhưng bạn có thể làm rõ câu trả lời cho tôi không? Tôi không biết phải làm gì. Tôi sử dụng danh sách trắng = Tôi đang kiểm tra đầu vào của người dùng và sau đó quyết định nội dung cần chèn vào truy vấn, nhưng tôi không chắc chắn cách chèn nó với sự cố ở trên –
đã chỉnh sửa bài đăng gốc –
tnx! truy vấn này đang hoạt động: CHỌN i.imageID, theImage, translationRating FROM Images i INNER JOIN TranslationChains t ON t.imageId = i.imageid WHERE i.userID =? AND i.translated = 0 AND? IN (t.targetLang, 'targetLang') –