2013-01-15 42 views
6

Ví dụ:Làm thế nào để sử dụng truy vấn con MySQL trong JDBC? truy vấn

SELECT country 
FROM data 
WHERE city LIKE 
(SELECT LEFT ('jakartada',7)); 

Ví dụ trong JDBC:

String sql = " SELECT country FROM data WHERE city LIKE (SELECT LEFT ('?',7)) "; 
PreparedStatement ps = koneksi.prepareStatement(sql); 
ps.setString(1,  city ); 
ResultSet rs = ps.executeQuery(); 

Tại sao điều này không làm việc đúng cách?

Trả lời

3

Không có tham số nào trong câu lệnh đã chuẩn bị, tuy nhiên mã cố gắng đặt tham số. Thử thêm tham số vào câu lệnh.

String sql = " SELECT country FROM data WHERE city LIKE (SELECT LEFT (?,7)) "; 
PreparedStatement ps = koneksi.prepareStatement(sql); 
ps.setString(1,  city ); 
ResultSet rs = ps.executeQuery(); 

Hoặc thử loại bỏ các thiết lập các tham số tuyên bố:

String sql = " SELECT country FROM data WHERE city LIKE (SELECT LEFT ('jakartada',7)) "; 
PreparedStatement ps = koneksi.prepareStatement(sql); 
ResultSet rs = ps.executeQuery(); 
+0

OP được sử dụng 'LIKE' Vì vậy, tôi hơi lo lắng về việc ném SQLException .. – Smit

+0

Sau đó, bắt SQLException? – hd1

+0

@Kevin Bowersox: cách thêm tham số vào câu lệnh, bạn có thể đưa ra ví dụ với truy vấn đó không? – reza

0

Đừng bạn trích dẫn trong bản Tuyên Bố chuẩn bị của bạn khi thiết lập giá trị tại thời gian chạy ... Nếu không nó sẽ mất nó như là đầu vào chỉ không cho vị trí ps ... Xóa dấu nháy đơn khỏi dấu chấm hỏi của bạn ...

1

Tôi tin rằng bạn đang thực hiện điều này khó hơn cần thiết và đồng thời bạn đang thiếu thứ gì đó. Đây có phải là những gì bạn đang cố gắng làm không?

SELECT country FROM data WHERE city LIKE 'jakarta%' 

Tức là, bạn đang tìm cột quốc gia từ mỗi hàng có tên thành phố bắt đầu bằng 'jakarta'? Nếu vậy, đừng quên ký hiệu %. Nếu bạn không bao gồm các % dấu, sau đó

SELECT country FROM data WHERE city LIKE 'jakarta' 

SELECT country FROM data WHERE city = 'jakarta' 

nghĩa chính xác những điều tương tự như nhau, và các nhà điều hành LIKE là vô nghĩa; bạn cũng có thể sử dụng toán tử =.

Vì vậy, có vẻ như với tôi truy vấn MySQL bạn muốn là

SELECT country FROM data WHERE city LIKE CONCAT(LEFT('jakartada',7),'%') 

để thêm dấu%. Bạn không cần chọn lựa trong trường hợp này.

Giống như bạn chỉ ra, các mã Java bạn cần sau đó là:

String sql = "SELECT country FROM data " . 
       "WHERE city LIKE CONCAT(LEFT(?,7),'%')"; 

PreparedStatement ps = koneksi.prepareStatement(sql); 
ps.setString(1,  city ); 
ResultSet rs = ps.executeQuery(); 
... process the rs records ... 
rs.close(); /* please don't forget to close your result sets */ 
+0

yeahh, bạn biết ý tôi là gì, nhưng mã java của bạn không hoạt động đúng cách – reza

+0

Tôi sử dụng truy vấn này cho chương trình của mình để dự đoán thời điểm lỗi xảy ra khi nhập liệu, vì vậy hệ thống sẽ ngắt chuỗi bằng cách lấy một vài ký tự ở bên phải hoặc bên trái của chuỗi đầu vào và sau đó thực hiện kết hợp phù hợp với dữ liệu trong cơ sở dữ liệu. Tôi đã thử truy vấn này và chạy tốt trong MySQL, vì vậy tôi đã cố gắng triển khai trong java nhưng nó không hoạt động tốt. ví dụ tôi có một đầu vào "jakartada", đây là đầu vào sai thì hệ thống sẽ kiểm tra để lấy một số ký tự của chuỗi ở bên trái và bên phải để tìm dữ liệu chính xác là "jakarta". – reza

0

sử dụng liên kết này cho giải pháp của bạn và truy vấn này

http://sqlfiddle.com/#!2/c79ab/10

SELECT country FROM data 
WHERE city LIKE CONCAT(LEFT('jakartada',7),'%') 
Các vấn đề liên quan