Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/01/2011, 22:37
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: Consulta sobre sp... (CallableStatement)

Hola,

Posiblemente,

Cada variable de Java tienen una clase asignada inclusive los primitivos (autooutboxing), lo que permite saber con exactitud el tipo de datos que contienen.

El enum classNames tendría que contener todos los tipos de clases que deseas usar y pasar a la base de datos, el método proxy se encargaría de regresar el enumerador del nombre de la clase. (Para no utilizar : if (algo == "Integer) else ... etc.) :

Código Java:
Ver original
  1. private enum classNames {
  2.         Integer, String, Object
  3.     }
  4.  
  5.     private classNames proxy(Object o) {
  6.         classNames name = classNames.Object;
  7.         try {
  8.             name = classNames.valueOf(o.getClass().getSimpleName());
  9.         } catch (IllegalArgumentException e) {
  10.         }
  11.         return name;
  12.     }

Con este método podrías hacer diferentes acciones dependiendo del tipo de datos que contiene el objecto "c" :

Código Java:
Ver original
  1. private void callCallableStatement(LinkedList list) throws SQLException {
  2.         // Connection conn = DriverManager.getConnection("");
  3.         // CallableStatement stmt = conn.prepareCall("");
  4.  
  5.         int i = 1;
  6.         for (Object c : list) {
  7.             switch (proxy(c)) {
  8.                 case Integer: // stmt.setInt(i++, (Integer)c); break;
  9.                 case String: // stmt.setString(i++, (String)c); break;
  10.                 default: // stmt.setObject(i++, c); break;
  11.                     System.out.println(proxy(c));
  12.                     System.out.println(c.getClass().getSimpleName());
  13.             }
  14.         }
  15.     }

Y podrías pasar la lista de valores ordenados en relación a la posición que tienen en el Statement, esto es solamente una idea básica que tendrías que mejorar para adecuarla a lo que necesitas,

Código Java:
Ver original
  1. public Main() throws SQLException {
  2.         LinkedList list = new LinkedList();
  3.         list.add(new Integer(100));
  4.         list.add(new String("Hello World!".getBytes()));
  5.         list.add(100L);
  6.         list.add(100);
  7.         list.add(new Byte("5"));
  8.         callCallableStatement(list);
  9.     }

Saludos,

Última edición por HackmanC; 21/01/2011 a las 22:46 Razón: whoops ... auto x out