2013-01-15 8 views
6

例クエリ:JDBCでJDBCでMySQLサブクエリを使用するには?

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

例:

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

これが正常に動作しないのはなぜ?

答えて

3

プリペアドステートメント内にパラメータはありませんが、コードはパラメータを設定しようとします。ステートメントにパラメーターを追加してみてください。

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

またはパラメータを設定するステートメントを削除してみてください:実行時に値を設定するとき

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

OPは 'LIKE'を使用していますだから私はリルビットSQLExceptionを投げることを懸念して.. – Smit

+0

その後、SQLExceptionをキャッチですか? – hd1

+0

@Kevin Bowersox:ステートメントにパラメータを追加する方法は、そのクエリの例を挙げることができますか? – reza

0

あなたがそうでない場合は、入力としてだけではないためにそれを取るでしょう...あなたのプリペアドステートメントでは引用しないでくださいpsの位置...あなたの疑問符から一重引用符を削除してください...

1

私はあなたがこれ以上必要以上に難しくしていると同時に、何かが欠けていると思います。これはあなたがやろうとしていることですか?

つまり、都市名が「jakarta」で始まるすべての行から国の列を探していますか?もしそうなら、%サインを忘れないでください。あなたが%記号が含まれていない場合は、

SELECT country FROM data WHERE city LIKE 'jakarta' 

SELECT country FROM data WHERE city = 'jakarta' 

はお互いとまったく同じことを意味し、LIKEオペレータは無意味です。 =演算子を使用することもできます。

だから、あなたがしたいMySQLのクエリは%記号を追加する

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

である私には思えます。この場合、副選択は必要ありません。

ご指摘のように、あなたが必要とするJavaコードは次のとおりです。

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

ええ、何を意味するのか分かりませんが、Javaコードが正常に動作しません。 – reza

+0

私のプログラムでこのクエリを使用して、入力が間違っていると予測すると、システムは文字列を右または左に入力された文字列のうち、データベース内のデータに従って照合を行います。 私はこのクエリを試して、MySQLでうまく動作するので、私はjavaで実装しようとしましたが、うまくいきません。 たとえば、入力が「jakartada」の入力が間違っていると、システムは「jakarta」という正しいデータを見つけるために左右の文字列の文字の一部を取るかどうかをチェックします。 – reza

0

使用のソリューションのために、このリンクと、このクエリ

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

SELECT country FROM data 
WHERE city LIKE CONCAT(LEFT('jakartada',7),'%') 
関連する問題