如何在JDBC中使用WHERE EXISTS函数

3
在过去的6-7个小时里,我一直在搜索/谷歌/尝试解决这个问题,但是到目前为止没有结果。我有一个SQL字符串(如下),在PHPMYADMIN中完美地工作,但在我的Java执行中不起作用。当尝试执行查询时,我会收到“找不到列rid”的错误信息。
SQLException:
java.sql.SQLException: Column 'rid' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851)
at net.matthewauld.racetrack.server.WrSQL.getJSONClassSpecificRiders(WrSQL.java:41)
at net.matthewauld.racetrack.server.ClientListener.parseCommand(ClientListener.java:110)
at net.matthewauld.racetrack.server.ClientListener.run(ClientListener.java:42)

--

SELECT * FROM `riders` WHERE EXISTS(SELECT * FROM `ridersclasses` WHERE ridersclasses.rid = riders.id AND `cid` = '6') ORDER BY `first_name` ASC

这是我的Java代码来执行SQL查询。
url = "jdbc:mysql://127.0.0.1:3306/racetrack2013?allowMultiQueries=true";
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery(query);

以下将发布两个表的结构和一些数据示例:

RidersClasses

+---------------------------------------------------+
|                   ridersclasses                   |
+---------------------------------------------------+
|  ID  |  RID  |  CID  |  BIKENUMBER  |  BIKEMODEL  |
+---------------------------------------------------+

骑手

+----------------------------------------------------------------------------------+
|                                         Riders                                   |
+----------------------------------------------------------------------------------+
|  ID  |  first_name  | last_name  |  address  |  city_id  |  h_phone  |  c_phone  |
+----------------------------------------------------------------------------------+

1
那些是波浪符键,是 SQL 的一部分... - Matthew Auld
@MatthewAuld 我认为你必须尝试使用大小写敏感的确切表名和列名。 - Yogesh Suthar
@YogeshSuthar 如果您查看我提供的信息,您会发现它已经被正确地大小写处理了。 - Matthew Auld
1
我认为根据你的异常信息,错误发生在执行后当你尝试从行中读取列时。 - DevZer0
1
@DAevZer0 我想你说得对。从getInt()抛出异常。 - ug_
显示剩余8条评论
1个回答

6
问题很简单:riders表中没有rid列。
从堆栈跟踪中可以看出,问题始于getInt。
所以请改用rs.getInt("id")而不是rs.getInt("rid")。

不错的建议,你可以加上使用左连接来替代 EXISTS 来获得所需结果。 - ug_
@ns47731 谢谢,我也想过了,但 rid = id,所以不必要。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接