[英]How to use MySQL subquery in JDBC?
示例查询:
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();
为什么这不能正常工作?
预准备语句中没有参数,但代码尝试设置参数。 尝试在语句中添加参数。
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();
我相信你会让它变得比它需要的更难,同时你也会失去一些东西。 这是你想要做的吗?
SELECT country FROM data WHERE city LIKE 'jakarta%'
也就是说,您是否正在寻找城市名称以“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 */
在运行时设置值时,不要在准备好的语句中引用...否则它将仅作为输入而不是ps位置...从问号中删除单引号...
使用此链接为您的解决方案和此查询
http://sqlfiddle.com/#!2/c79ab/10
SELECT country FROM data
WHERE city LIKE CONCAT(LEFT('jakartada',7),'%')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.