JSP 頁面直寫 JDBC 代碼,單表查詢正常,執行 `SELECT * FROM student NATURAL JOIN xueji` 時在 `while(rs.next())` 拋出異常。
// 假設 student 表主鍵 sno,xueji 表外鍵 sno
String sql = "SELECT s.*, x.* FROM student s INNER JOIN xueji x ON s.sno = x.sno";
// 執行前先查看表結構
DESC student;
DESC xueji;
// 確認唯一公共列為連接鍵,否則必須用顯式 ON
// DAO 層
public List findStudentsWithXueji() {
String sql = "SELECT s.sno, s.sname, x.grade FROM student s JOIN xueji x ON s.sno = x.sno";
// 使用 PreparedStatement + ResultSet 映射到 VO
return list;
}
// Servlet/Controller
List list = dao.findStudentsWithXueji();
request.setAttribute("list", list);
request.getRequestDispatcher("/student_list.jsp").forward(req, resp);
<c:forEach items="${list}" var="stu">
<tr>
<td>${stu.sno}</td>
<td>${stu.sname}</td>
<td>${stu.grade}</td>
</tr>
</c:forEach>
`NATURAL JOIN` 依賴同名列隱式連接,**不穩定、不可移植、難維護**。生產環境**必須使用顯式 `JOIN ... ON`**,並嚴格分層開發。