2014-01-13 52 views
2

我想使用子查询访问表中的数据。 表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; 
} 

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

谢谢你的时间。

编辑:logentry表的日志表的样本数据 enter image description here

样本数据 enter image description here

预期输出:

我没有这方面的一个屏幕截图,但我需要的是只是为了遍历从上述方法返回的ArrayList。

+0

您可以发布该表与一些样本数据并提供预期的输出? –

+1

你是什么意思'我得到空'?是否您遇到LogBookEntry表中某列的空值?当查询没有返回任何结果时,结果集“rs”永远不会为空 - 它是空的 - 这意味着rs.next()将返回false。 –

+0

通过使用'SELECT Diarycode FROM LOGBOOKTABLE WHERE STUDENTUSERNAME =? OR SUPERVISORUSERNAME =? AND PROJECT_APPROVE_STATUS =?)',你能得到'Diarycode'吗? –

回答

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

thx,让它工作:) –

+0

@ Shehan.W加入QUERY或其他? –

+0

使用join查询 –