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

我相信你让这变得比它需要的更难,同时你错过了一些东西。这是你想要做的吗?

 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 */
于 2013-01-15T03:00:54.533 回答
1

将此链接用于您的解决方案和此查询

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

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

在运行时设置值时不要在准备好的语句中引用...否则它将仅将其作为输入而不是 ps 位置...从问号中删除单引号...

于 2013-01-15T02:28:22.120 回答