繁体   English   中英

如何在JDBC中使用MySQL子查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM