2012-08-03 56 views
22

對於所有數據類型,我可以使用setObject()方法PreparedStatement(如string,int,double ..)?PreparedStatement的setObject()方法

我看到的潛在問題是什麼,如果我使用它?

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

是的,你可以,它應該工作,我懷疑這就是像Hibernate這樣的庫。像往常一樣,一些司機在某些角落裏可能只是一些小車。 – Thilo 2012-08-03 10:03:18

+0

例如,Oracle似乎遇到了setNull問題:http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/main/java/org/apache/commons/dbutils/AbstractQueryRunner.java?版本= 1362322&視圖=標記#l215 – Thilo 2012-08-03 10:08:52

+0

http://stackoverflow.com/questions/19421374/arithmetic-overflow-or-other-arithmetic-exception-when-using-setobject-method請參閱此鏈接瞭解更多詳情。 – Eddy 2013-10-18 07:49:07

回答

10

我只在MySQL中使用setObject(),我從來沒有遇到過問題。我不能說其他數據庫或其他供應商。

0

您可能會遇到Blob或MSSQL DateTimeOffeet等專用日期字段的問題。

另外我發現了一個問題「無法在java.lang.Character和JAVA_OBJECT之間轉換。」

如果參數是單個字符類型。

if (param instanceof Character) { 
     param = "" + param; 
    } 
相關問題