2013-01-15 16 views
6

Przykład zapytania:Jak używać podzapytania MySQL w JDBC?

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

przykład w 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(); 

Dlaczego to nie działa prawidłowo?

Odpowiedz

3

W przygotowanej instrukcji nie ma parametru, ale kod próbuje ustawić parametr. Spróbuj dodać parametr do wyciągu.

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(); 

Albo spróbuj usunąć ustawienie parametru oświadczenie:

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

OP używa 'LIKE' Więc jestem trochę zaniepokojony wyrzucaniem wyjątku SQLEx. – Smit

+0

Następnie złapać wyjątek SQLException? – hd1

+0

@Kevin Bowersox: jak dodać parametr na wyciągu, czy możesz podać przykład z tym zapytaniem? – reza

0

Czy nie cytuje w swoim oświadczeniu przygotowanym podczas ustawiania wartości w czasie wykonywania ... Inaczej to zajmie je jako dane wejściowe nie tylko dla pozycja ps ... Usuń pojedyncze cudzysłowy ze swojego znaku zapytania ...

1

Uważam, że robisz to trudniej, niż musi być, a jednocześnie czegoś brakuje. Czy to właśnie próbujesz zrobić?

SELECT country FROM data WHERE city LIKE 'jakarta%' 

To znaczy, czy szukasz kolumny kraju z każdego rzędu, gdzie nazwa miasta zaczyna się na "Dżakarta"? Jeśli tak, nie zapomnij o znaku %. Jeśli nie to znak %, potem

SELECT country FROM data WHERE city LIKE 'jakarta' 

i

SELECT country FROM data WHERE city = 'jakarta' 

myśli dokładnie tak samo jak każdy inny, a operator LIKE ma sensu; równie dobrze możesz użyć operatora =.

Tak, wydaje mi się kwerenda MySQL chcesz to

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

dodanie znaku%. W tym przypadku nie potrzebujesz podselekcji.

Jakbyś zauważył, kod Java trzeba wtedy jest:

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, wiesz o co mi chodzi, ale twój kod java nie działa poprawnie – reza

+0

Używam tego zapytania do mojego programu, aby przewidzieć, kiedy wystąpi błąd podczas wpisywania danych wejściowych, więc system przerwie ciąg znaków, biorąc kilka znaków po prawej lub lewej stronie ciąg wejściowy, a następnie dopasowywanie zgodnie z danymi w bazie danych. Próbowałem tego zapytania i działa dobrze w MySQL, więc próbowałem zaimplementować w java, ale nie działa dobrze. Na przykład mam wejście "jakartada", gdzie jest to błędne wejście, wtedy system sprawdzi, czy niektóre znaki ciągu po lewej i prawej stronie znajdują poprawne dane "jakarta". – reza

Powiązane problemy