2010-04-30 2 views
2

I a créé une procédure stockée dans un SQL Express 2008 et j'obtiens l'erreur suivante lors de l'appel de la procédure à partir d'une méthode Java:Java w/SQL Server Express 2008 - Index hors de portée exception

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) 

Je ne peux pas comprendre d'où il vient ...> _ <

Toute aide serait appréciée.

Cordialement, BS_C3


Voici un code source:

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; 
} 
+1

Vous faites quelque chose avec un tableau. Besoin de code java pour être utile. –

Répondre

8

Il ne suffit pas de code source fourni pour être sûr, mais basée sur la trace de la pile, mon pari est le nombre de ? les espaces réservés et le nombre de paramètres fournis ne correspondent pas. Je suppose que vous n'avez pas assez d'espaces réservés. Je vous suggère de vérifier pour vous assurer que vous avez le bon nombre de chacun.

0

Merci beaucoup pour vos réponses et le temps. J'ai dû changer la procédure stockée dans le DB et lors de la réécriture du code, l'erreur s'est éteinte. Je suppose que Sean Reilly avait raison =)

Cordialement. BS_C3

Questions connexes