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

Seleccione idioma Seleccione idioma
Id. de artículo: 195471 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

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(" { ? = call
SimpleDate2(?, ?, ?, ?) }");
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 ();
       }

}
				

Propiedades

Id. de artículo: 195471 - Última revisión: viernes, 11 de febrero de 2005 - Versión: 2.1
La información de este artículo se refiere a:
  • Microsoft Visual J++ 6.0 Standard Edition
Palabras clave: 
kbbug kbdatabase kbpending KB195471 KbMtes kbmt
Traducción automática
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

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com