Java с SQL Server Express 2008 - исключение индекса вне диапазона - PullRequest
2 голосов
/ 30 апреля 2010

Я создал хранимую процедуру в SQL Express 2008 и получаю следующую ошибку при вызове процедуры из метода Java:

Index 36 is out of range.
com.microsoft.sqlserver.jdbc.SQLServerException:Index 36 is out of range.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:698)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:707)
    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setString(SQLServerCallableStatement.java:1504)
    at fr.alti.ccm.middleware.Reporting.initReporting(Reporting.java:227)
    at fr.alti.ccm.middleware.Reporting.main(Reporting.java:396)

Я не могу понять, откуда он идет ...> _ <</p>

Любая помощь будет оценена.

С уважением, BS_C3


Вот некоторый исходный код:

public ArrayList<ReportingTableMapping> initReporting(
        String division,
        String shop,
        String startDate,
        String endDate)
{
    ArrayList<ReportingTableMapping> rTable = new ArrayList<ReportingTableMapping>();

    ManagerDB db = new ManagerDB(); 
    CallableStatement callStmt = null;
    ResultSet rs = null;
    try {
         callStmt = db.getConnexion().prepareCall("{call getInfoReporting(?,...,?)}");
         callStmt.setString("CODE_DIVISION", division);
         .
         .
         .
         callStmt.setString("cancelled", " ");

         rs = callStmt.executeQuery();
         while (rs.next())
         {
             ReportingTableMapping rtm = new ReportingTableMapping(
                     rs.getString("werks"), ... );

             rTable.add(rtm);
         }
         rs.close();
         callStmt.close();

    } catch (Exception e) {
          System.out.println(e.getMessage());
          e.printStackTrace();
    } finally {
          if (rs != null)
                try { rs.close(); } catch (Exception e) { }
          if (callStmt != null)
                try { callStmt.close(); } catch (Exception e) { }
          if (db.getConnexion() != null)
                try { db.getConnexion().close(); } catch (Exception e) { }
    }   

    return rTable;
}

Ответы [ 3 ]

8 голосов
/ 30 апреля 2010

Недостаточно исходного кода, чтобы быть уверенным, но на основании трассировки стека моя ставка равна числу заполнители и количество предоставленных параметров не совпадают. Я предполагаю, что у вас недостаточно заполнителей. Я бы рекомендовал перепроверить, чтобы убедиться, что у вас есть правильный номер каждого.

0 голосов
/ 04 мая 2010

Большое спасибо за ваши ответы и время. Мне пришлось поменять запасную процедуру в БД и при переписывании кода ошибка вышла. Я думаю, что Шон Рейли был прав =)

С уважением. BS_C3

0 голосов
...