<%
try {
String username = (String)session.getAttribute("username");
String leaveType, startDate, endDate, reason;
leaveType = request.getParameter("leaveType");
startDate = request.getParameter("StartDate");
endDate = request.getParameter("EndDate");
reason = request.getParameter("reason");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","12345");
username = (String)session.getAttribute("username");
PreparedStatement pst = con.prepareStatement("insert into 'leave (leaveType,StartDate,EndDate,Reason) values (?,?,?,?)");
pst.setString(1, leaveType);
pst.setString(2, startDate);
pst.setString(3, endDate);
pst.setString(4, reason);
int row = pst.executeUpdate();
if(row==1)
{
%>
<script>
alert("Leave Applied");
</script>
<jsp:include page="profile.jsp"></jsp:include>
<% }
}
catch(Exception e)
{
out.println(e);
}
%>
这个错误的含义和解决方案是什么?java.sql.SQLException:参数索引超出范围(1〉参数数,即0)。
错误页面上URL如下所示(java.sql.SQLException:参数索引超出范围(1〉参数数,即0):http://localhost:8080/高级员工管理系统/离职员工.jsp?离职类型=病假&开始日期=2023-01- 28 &结束日期=2023-02- 05 &原因=s
1条答案
按热度按时间pobjuy321#
我认为这是由
'
字符引起的,基本上,您已经开始了一个带引号的字符串('leave
)而不终止它。我的猜测是JDBC驱动程序的解析器假设?
字符是字符串的一部分...因此不是参数标记。因此它在消息 *"... 1〉参数数中显示零,即0 ″ *。尝试将“'leave“更改为“' leave '“
请注意,它需要是反引号而不是单引号!!参见How do I escape reserved words used as column names? MySQL/Create Table。反引号是必需的,因为
LEAVE
是MySQL保留字。