2012-08-03 11 views
22

posso usare setObject() metodo PreparedStatement per tutti i tipi di dati (come string, int, double ..)?setObject() metodo di PreparedStatement

Quali sono i potenziali problemi che vedo se lo uso?

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ì, è possibile, e dovrebbe funzionare, e sospetto che sia ciò che fanno anche le librerie come Hibernate. Come al solito, alcuni driver potrebbero essere solo un po 'buggati in alcuni casi d'angolo. – Thilo

+0

Ad esempio, Oracle sembra avere problemi con setNull: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/main/java/org/apache/commons/dbutils/AbstractQueryRunner.java? revisione = 1362322 & view = markup # l215 – Thilo

+0

http://stackoverflow.com/questions/19421374/arithmetic-overflow-or-other-arithmetic-exception-when-using-setobject-method Leggi questo link per ulteriori dettagli. – Eddy

risposta

10

utilizzare setObject() esclusivamente con MySQL e non ho mai avuto un problema con esso. Non posso parlare per altri database o altri fornitori.

0

Si potrebbe potenzialmente avere un problema con Blobs o campi data specializzati come MSSQL DateTimeOffeet.

Inoltre ho trovato un problema "Impossibile convertire tra java.lang.Character e JAVA_OBJECT."

Se il parametro è un tipo di carattere singolo.

if (param instanceof Character) { 
     param = "" + param; 
    } 
Problemi correlati