ERROR: JDBC almacenó proceso con la fecha de salida con la que provoca excepción Param

AVISO: Gracias por utilizar el servicio de Traducción Automática. Este artículo ha sido traducido por un sistema informático sin ayuda humana (Machine Translation). Microsoft ofrece estos artículos a los usuarios que no comprendan el inglés, exclusivamente, con el fin de que puedan entenderlos más fácilmente. Microsoft no se hace responsable de la calidad lingüística de las traducciones ni de la calidad técnica de los contenidos de los artículos así como tampoco de cualesquiera problemas, directos o indirectos, que pudieran surgir como consecuencia de su utilización por los lectores.

Haga clic aquí para ver el artículo original (en inglés): 195471
Síntomas
Llamar a un procedimiento almacenado generó que los parámetros de Fecha de JDBC pueden provocar un java.lang.NumberFormatException. El texto de excepción tiene el formato:

*** Number Format Exception ***java.lang.NumberFormatException: <garbage # here>        at java/lang/Integer.parseInt (Integer.java)        at java/lang/Integer.parseInt (Integer.java)        at java/sql/Timestamp.valueOf (Timestamp.java)        at com/ms/jdbc/odbc/JdbcOdbcCallableStatement.getTimestamp(JdbcOdbcCallableStatement.java)        at com/ms/jdbc/odbc/JdbcOdbcCallableStatement.getObject(JdbcOdbcCallableStatement.java)        at sdate.main (sdate.java:30)				
Causa
Esto sucede en la implementación del puente JDBC/ODBC. Tenga en cuenta que llamar a GetTimestamp en vez de getObject produce el mismo problema.
Solución
Evite utilizar Fecha como un parámetro de salida de un procedimiento almacenado.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.
Más información

Pasos para reproducir este comportamiento

Cree un procedimiento almacenado con el SQL siguiente:
-- start of SQL   create proc SimpleDate2     @i1  int output,      @i2  int output,       @i3  int output,       @Date4  datetime output     as   select @i1 = 666,          @i2 = 777,          @i3 = 888,          @Date4 = getdate()    return 999--- End of SQL				
El Java siguiente reproducirá el error.

Nota Debe cambiar UID <nombre de usuario> y PWD <contraseña segura> a los valores correctos antes de ejecutar este código. Asegúrese de que UID tiene los permisos apropiados realizar esta operación en la base de datos.
Timestamp tsDate = new Timestamp(System.currentTimeMillis());int i=-1, iobj=-1,k;try   {Class.forName("com.ms.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection"JDBC:ODBC:DRIVER={SQL    Server};   SERVER=(local);DATABASE=pubs;UID=<username>;PWD=<strong password>;";for(i = 1; i < 100; i++ ) {       CallableStatement stmt = conn.prepareCall(" { ? = callSimpleDate2(?, ?, ?, ?) }");stmt.registerOutParameter(1, Types.SMALLINT);for(k=2;k<5;k++){stmt.setInt(k,k+999);   stmt.registerOutParameter(k, Types.INTEGER);}stmt.setObject(5, tsDate, Types.TIMESTAMP);   stmt.registerOutParameter(5, Types.TIMESTAMP);     int count = stmt.executeUpdate();Object obj=stmt.getObject(5);System.out.println(obj);stmt.close(); System.gc();      } conn.close(); }  catch(NumberFormatException nfe)    {       System.out.println("*** Number Format Exception ***"); nfe.printStackTrace ();       }}				

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 195471 - Última revisión: 02/11/2005 20:23:00 - Revisión: 2.1

Microsoft Visual J++ 6.0 Standard Edition

  • kbbug kbdatabase kbpending KB195471 KbMtes kbmt
Comentarios