使用子查询

时间:2014-01-13 04:23:37

标签: java database subquery derby

我正在尝试使用子查询访问表中的数据。 表1包含表2的外键,这意味着我可以使用该密钥访问表2中的数据。 我的问题是在从下面显示的方法返回数组列表后,arraylist为null。

这就是我所做的:

     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;
 }

之前我没有使用过子查询,这是我第一次使用它们。 这里似乎有什么问题?

感谢您的时间。

编辑:日志表的示例数据 enter image description here

logentry表的示例数据 enter image description here

预期产出:

我没有屏幕截图,但我需要的只是遍历将从上述方法返回的arraylist。

1 个答案:

答案 0 :(得分:2)

问题是,LOGENTRYTABLE表格中不包含STUDENTUSERNAME, SupervisorUsername, projecttitle, projectDescription, startDate,等列...

 rs.getString("STUDENTUSERNAME"), rs.getString("SupervisorUsername"), etc...

可能,您需要加入查询

"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=?)"