如何修复“参数索引超出范围”异常

时间:2019-06-20 10:21:19

标签: java mysql eclipse servlets

我正在尝试将一些数据插入数据库,但最终出现异常。 有人可以帮我解决这个问题吗?

public void newGuestHistory(Booking booking) {
        try {
            connection = DBConnection.getInstance();

            preparedStatement = connection.prepareStatement(QueryUtil.queryByID(CommonConstants.QUERY_ID_INSERT_GUEST_HISTORY));

            preparedStatement.setString(CommonConstants.COLUMN_INDEX_ONE, CommonUtil.generateIds(getHistoryIds()));
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_TWO, booking.getRoomNo());
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_THREE, booking.getfName());
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_FOUR, booking.getlName());
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_FIVE, booking.getNIC());
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_SIX, booking.getContactNo());
            preparedStatement.setInt(CommonConstants.COLUMN_INDEX_SEVEN, booking.getNoOfNights());
            preparedStatement.setString(CommonConstants.COLUMN_INDEX_EIGHT, booking.getCheckInOut());

            preparedStatement.executeUpdate();
        } catch (ClassNotFoundException | SQLException | SAXException | IOException | ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

此处DBConnetion类返回一个实例以与数据库连接。 所有参数索引先前都在CommonConstants类中定义并存储了最终变量。 queryByID()方法将返回相关查询。 CommonUtil类中的generateIds()方法将返回一个String值(这是与我的程序相关的生成的ID)

我最终遇到了这个例外:

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 0).
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1408)
    at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1421)
    at com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1788)
    at com.itp.services.CheckInOutImpl.newGuestHistory(CheckInOutImpl.java:103)
    at com.itp.services.CheckInOutImpl.checkOut(CheckInOutImpl.java:74)
    at com.itp.servlets.CheckOutServlet.doPost(CheckOutServlet.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

0 个答案:

没有答案