6

クエリの例:

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

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

これが正しく機能しないのはなぜですか?

4

4 に答える 4

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();
于 2013-01-15T01:50:12.800 に答える
1

このリンクをソリューションとこのクエリに使用してください

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

SELECT country FROM data
WHERE city LIKE CONCAT(LEFT('jakartada',7),'%')
于 2013-01-15T03:54:25.037 に答える
1

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

 SELECT country FROM data WHERE city LIKE '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 */
于 2013-01-15T03:00:54.533 に答える
0

実行時に値を設定するときに、準備されたステートメントで引用符を付けませんか...そうしないと、ps位置ではなく入力としてのみ使用されます...疑問符から一重引用符を削除します...

于 2013-01-15T02:28:22.120 に答える