我正在尝试使用子查询访问表中的数据。 表 1 包含表 2 的外键,这意味着我可以使用该键访问表 2 中的数据。 我的问题是在我从下面显示的方法返回数组列表后,数组列表为空。
这是我所做的:
LogEntry logBookDates;
List<LogEntry> bookList =new ArrayList();
try{
PreparedStatement getSummaryStmt=con.prepareStatement("SELECT * FROM LOGENTRYTABLE WHERE DIARYCODE =(SELECT Diarycode FROM LOGBOOKTABLE WHERE STUDENTUSERNAME=? OR SUPERVISORUSERNAME=? AND PROJECT_APPROVE_STATUS=?)");
//the above statment is the sub query which i have created, i get the diary code from log book table and then access the log entry table.
getSummaryStmt.setString(1,userName);
getSummaryStmt.setString(2,userName);
getSummaryStmt.setString(3,"Accepted");
ResultSet rs=getSummaryStmt.executeQuery();
while(rs.next())
{
logBookDates=new LogEntry(rs.getString("STUDENTUSERNAME"),rs.getString("SupervisorUsername"),rs.getString("projecttitle"),rs.getString("projectDescription"),rs.getDate("startDate"),rs.getDate("enddate"),rs.getString("project_approve_status"),rs.getString("diarycode"),rs.getString("projectcode"),rs.getInt("Index"),rs.getString("log_Entry"),rs.getDate("logentry_date"),rs.getString("supervisor_comment"),rs.getString("project_progress"));
bookList.add(logBookDates);
}
}catch(Exception e){}
return bookList;
}
我以前没有使用过子查询,这是我第一次使用它们。 这似乎是什么问题?
感谢您的宝贵时间。
编辑:日志表的示例数据
logentry表示例数据
预期输出:
我没有屏幕截图,但我需要的只是遍历将从上述方法返回的数组列表。
最佳答案
这就是问题所在,LOGENTRYTABLE
表不包含包含 STUDENTUSERNAME、SupervisorUsername、projecttitle、projectDescription、startDate、
等的列...
rs.getString("STUDENTUSERNAME"), rs.getString("SupervisorUsername"), etc...
可能,您需要 JOIN 查询
"SELECT * FROM LOGENTRYTABLE LT
INNER JOIN LOGBOOKTABLE LB ON LT.DIARYCODE=LB.DIARYCODE
WHERE LT.DIARYCODE =
(SELECT DIARYCODE FROM LOGBOOKTABLE
WHERE (STUDENTUSERNAME=? OR SUPERVISORUSERNAME=?)
AND PROJECT_APPROVE_STATUS=?)"
关于java - 使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21083856/