preparedStatement.executeQuery()异常但没有报错该怎么办?

刚学jsp和sql,想做一个查询,在查询页面输入学生姓名、所在系、课程名得到该生课程成绩,但是无法打开查询结果的jsp文件,只是提示我有异常,请问是哪里出了问题?该如何修改?以下是我的代码:

<%@ page language="java" contentType="text/html; charset=utf-8"%> 
<%@ page import="java.sql.*"%>  
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
head>
<title>inquiretitle>
<body bgcolor="gold" text="black"> 
<center> 
<div><b><font color="#8A0000" face="华文隶书" size="10">查询学生信息  
<hr>font>b>div> 
<form action="inquire2.jsp" method="post">
<font color="black" face="华文宋体" size="5">
姓名:<input type="text" name="name"><br>
所在系:<input type="text" name="department"><br>
课程:<input type="text" name="course"><br>
<input type="submit" value="提交">
<input type="reset" value="取消">
font>
form>
body>
html>


结果页:

<%@ page pageEncoding="UTF-8"%>
<%@ page language="java" contentType="text/html; charset=utf-8"%> 
<%@ page import="java.sql.*"%>  
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
head>
<title>查询结果title>
<body bgcolor="gold" text="black"> 
<center> 
<div><b><font color="#8A0000" face="华文隶书" size="10">查询结果
<hr>font>b>div>
<%
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/学生选课?useUnicode=true&characterEncoding=UTF-8";
String username = "root";
String password = "123456";
Connection conn= DriverManager.getConnection(url,username,password);
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String department = request.getParameter("department");
String course = request.getParameter("course");
String sql = "SELECT 学生.姓名,所在系,课程.课程名,成绩 from 学生,课程,选课 where 课程.课程号=选课.课程号 and 学生.学号=选课.学号 and 学生.姓名=? and 所在系=? and 课程名=?";
sql = new String(sql.getBytes("iso-8859-1"),"utf-8");
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,name);
preparedStatement.setString(2,department);
preparedStatement.setString(3,course);
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.last();
%>
<center>
<tr>
<td>姓名td>
<td>所在系td>
<td>课程td>
<td>成绩td>
tr>
<%
resultSet.beforeFirst();
while (resultSet.next()){
    %>  <tr align="center">
    <td><%=resultSet.getString("学生.姓名")%>td>
    <td><%=resultSet.getString("所在系")%>td>
    <td><%=resultSet.getString("课程.课程名")%>td>
    <td><%=resultSet.getString("成绩")%>td>
    tr>
<%}%>
table>
center>
<%
if (resultSet!=null){
    resultSet.close();
}
if (preparedStatement!=null){
    preparedStatement.close();
}
if (conn!=null){
    conn.close();
}
%>
body>
html>


结果页的报错信息是:
在 [29] 行处理 [/inquire2.jsp] 时发生异常
java.sql.SQLException: No value specified for parameter 4

1、检查你的参数个数和你的值的个数是否一致,错误提示为2的参数没有值
2、或者注意你插入的数据的字段类型是否一直
3、包括类型和数量