mysql 错误:java.sql. SQL异常:参数索引超出范围(1>参数数,为0)

ddrv8njm  于 2023-01-16  发布在  Mysql
关注(0)|答案(1)|浏览(240)
<%            
       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

pobjuy32

pobjuy321#

我认为这是由'字符引起的,基本上,您已经开始了一个带引号的字符串('leave)而不终止它。我的猜测是JDBC驱动程序的解析器假设?字符是字符串的一部分...因此不是参数标记。因此它在消息 *"... 1〉参数数中显示零,即0 ″ *。
尝试将“'leave“更改为“' leave '“
请注意,它需要是反引号而不是单引号!!参见How do I escape reserved words used as column names? MySQL/Create Table。反引号是必需的,因为LEAVE是MySQL保留字。

相关问题