2016-05-11 8 views
0

Ich versuche, eine gespeicherte Prozedur aufrufen, die Parameter ausArrayIndexOutOfBoundsException wenn StoredProcedure in Java-Ausführung

Mein Code ist:

CallableStatement callableStatement = conn.prepareCall("{CALL banco.sppro_prepagoprestamo(?,?,?,?,NOW(),?,?)}"); 
callableStatement.registerOutParameter(1, Types.VARCHAR); 
callableStatement.registerOutParameter(2, Types.INTEGER); 
callableStatement.setString(3,cuenta); 
callableStatement.setString(4,monto); 
callableStatement.setString(5,usuarioIdLog); 
callableStatement.setString(6,tipoPago); 
callableStatement.executeUpdate(); 
String msg = callableStatement.getString(1); 
int codigo = callableStatement.getInt(2); 

aber wenn es die Linie

ausführen
callableStatement.executeUpdate(); 

Es wirft Der Fehler java.lang.ArrayIndexOutOfBoundsException: -1

Ich suchte in verschiedenen Web-Seiten, dieses Problem zu lösen, aber ich selbst herausgefunden, dass die Datenbankverbindung ändert:

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/banco?user=user&password=pass"); 

zu:

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
conn = DriverManager.getConnection(DB_CONNECTION, DB_USER,DB_PASSWORD); 

lösen das Problem, jetzt möchte ich einen Pool-Verbindung zu schaffen, in tomcat also ändere ich die Verbindung zu:

InitialContext context = new InitialContext(); 
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/BancoDB"); 
conn= dataSource.getConnection(); 

aber wieder wirft es den gleichen Fehler, kann jemand wissen, warum das passiert?

Vielen Dank im Voraus.

EDIT

Dies ist der Fehler:

java.lang.ArrayIndexOutOfBoundsException: -1 
    com.mysql.jdbc.CallableStatement.setOutParams(CallableStatement.java:2088) 
    com.mysql.jdbc.CallableStatement.executeUpdate(CallableStatement.java:822) 
    org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
    org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
    org.apache.jsp.credito.procesos.creproprepagoprestarjeta.creProPrepagoCtaVirtualGraba_jsp._jspService(creProPrepagoCtaVirtualGraba_jsp.java:1455) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
+0

Wie haben Sie dann Ihre Datenquelle definiert? –

+0

Was meinst du ??, ich modifiziere nur die context.xml des Tomcat, die Verbindung funktioniert, das schlägt nur fehl, wenn ich versuche, einen StoredProcedure aufzurufen, der out Parameter –

+0

den Stacktrace dann –

Antwort

1

Dies ist ein bekanntes Problem in den MySQL-Treiber es in 5.1.13 mehr Details festgelegt wurde here, so dass Ihre Fehler zu beheben einfach aktualisieren auf die neueste Version.

+0

Ja, das funktioniert, ich nur auf ein neues Upgrade und es behebt das Problem, danke für Ihre Hilfe. –

+0

@AlanGaytan gute Nachrichten –

Verwandte Themen