数据库模糊查询问题
通过一个页面输入学生的姓氏来查找学生的所有信息,提交后报错
<body>
请选择查询条件<hr width="100%" size="3">
<form action="stu_likefind.jsp" method="post" >
姓名:<input type="text" name="id"><br><br>
<input type="submit" value="提 交">
<input type="reset" value="重 置">
<input type="button" value="返 回" onClick="location.href='stu_info.jsp'">
</form>
</body>
<body>
<%String driverName="com.mysql.jdbc.Driver";
String userName="root";
String userPwd="123456";
String dbName="students";
String url1="jdbc:mysql://localhost:3306/"+dbName;
String url2="?user="+userName+"&password="+userPwd;
String url3="&useUnicode=true&characterEncoding=UTF-8";
String url=url1+url2+url3;
Class.forName(driverName);
Connection conn=DriverManager.getConnection(url);
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String sql="select * from stu_info where id like '?%'";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(2,name);
ResultSet rs=pstmt.executeQuery();
rs.last();
%>你要查询的学生记录
<table border="2" bgcolor="ccceee" width="650">
<tr bgcolor="CCCCCC" align="center">
<td>记录条数</td>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>班级</td>
<td>专业</td>
<td>入学年份</td>
<td>出生年月</td>
</tr>
<%rs.beforeFirst();
while(rs.next()){
%><tr align="center">
<td><%=rs.getRow() %></td>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age") %></td>
<td><%=rs.getString("Class") %></td>
<td><%=rs.getString("profession") %></td>
<td><%=rs.getString("year") %></td>
<td><%=rs.getString("birth") %></td>
</tr>
<%} %>
</table>
<%if(rs!=null){rs.close();}
if(pstmt!=null){pstmt.close();}
if(conn!=null){conn.close();}
%>
</body>
javax.servlet.ServletException: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 0).
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.stu_005flikefind_jsp._jspService(stu_005flikefind_jsp.java:169)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 0).
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3711)
com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3695)
com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3737)
com.mysql.jdbc.PreparedStatement.setNull(PreparedStatement.java:3775)
com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4386)
org.apache.jsp.stu_005flikefind_jsp._jspService(stu_005flikefind_jsp.java:99)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)