2012-08-03 18 views
22

puedo usar setObject() método de PreparedStatement para todos los tipos de datos (como string, int, double ..)?setObject() método de PreparedStatement

¿Cuáles son los posibles problemas que veo si uso eso?

protected void fillStatement(PreparedStatement stmt, Object[] params) 
     throws SQLException { 

     if (params == null) { 
      return; 
     } 

     for (int i = 0; i < params.length; i++) { 
      if (params[i] != null) { 
       stmt.setObject(i + 1, params[i]); 
      } else { 
       stmt.setNull(i + 1, Types.OTHER); 
      } 
     } 
    } 
+0

Sí, puede, y debería funcionar, y sospecho que esto es lo que también hacen las bibliotecas como Hibernate. Como de costumbre, algunos controladores pueden estar un poco caídos en algunos casos de esquina. – Thilo

+0

Por ejemplo, Oracle parece tener problemas con setNull: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/main/java/org/apache/commons/dbutils/AbstractQueryRunner.java? revision = 1362322 & view = markup # l215 – Thilo

+0

http://stackoverflow.com/questions/19421374/arithmetic-overflow-or-other-arithmetic-exception-when-using-setobject-method Consulte este enlace para obtener más detalles. – Eddy

Respuesta

10

usar setObject() exclusivamente con MySQL y nunca he tenido un problema con él. No puedo hablar por otras bases de datos u otros proveedores.

0

Es posible que tenga un problema con Blobs o campos de fecha especializados como MSSQL DateTimeOffeet.

También he encontrado un problema "No se puede convertir entre java.lang.Character y JAVA_OBJECT".

Si el parámetro tiene un solo carácter.

if (param instanceof Character) { 
     param = "" + param; 
    } 
Cuestiones relacionadas