2012-08-03 10 views
22
() yöntemini

tüm veri türleri için PreparedStatement arasında setObject() yöntemi kullanabilir (gibi string, int, double ..)?setObject PreparedStatement

Bunu kullanıp kullanmadığımı gördüğüm olası sorunlar nelerdir?

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

Evet, yapabilir ve işe yaraşır, ve ben de Hibernate gibi kitaplıkların da bunu yaptığından şüpheleniyorum. Her zaman olduğu gibi, bazı sürücüler bazı köşe durumlarda sadece biraz buggy olabilir. – Thilo

+0

Örneğin, Oracle setNull ile sorun yaşıyor gibi görünüyor: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/main/java/org/apache/commons/dbutils/AbstractQueryRunner.java? revizyon = 1362322 & view = işaretleme # l215 – Thilo

+0

http://stackoverflow.com/questions/19421374/arithmetic-overflow-or-other-arithmetic-exception-when-using-setobject-method Daha fazla bilgi için bu bağlantıya bakın. – Eddy

cevap

10

Ben MySQL ile münhasıran setObject() kullanmak ve onunla bir problemim olmamıştı. Diğer veritabanları veya diğer satıcılar için konuşamıyorum.

0

Kabuklarla veya MSSQL DateTimeOffeet gibi özel tarih alanlarında bir sorunla karşılaşabilirsiniz.

Ayrıca "java.lang.Character ve JAVA_OBJECT arasında dönüştürülemiyor."

Parametre, tek bir karakter türüdür.

if (param instanceof Character) { 
     param = "" + param; 
    } 
İlgili konular