2012-08-03 28 views
22

Tôi có thể sử dụng phương thức setObject() của PreparedStatement cho tất cả các kiểu dữ liệu (như string, int, double ..)?setObject() của PreparedStatement

Các vấn đề tiềm năng tôi thấy nếu tôi sử dụng?

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

Có, bạn có thể, và nó sẽ hoạt động, và tôi nghi ngờ đây là những thư viện như Hibernate cũng vậy. Như thường lệ, một số trình điều khiển có thể chỉ là một chút lỗi trong một số trường hợp góc. – Thilo

+0

Ví dụ, Oracle dường như có rắc rối với 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 Tham khảo liên kết này để biết thêm chi tiết. – Eddy

Trả lời

10

Tôi sử dụng setObject() độc quyền với MySQL và tôi chưa bao giờ gặp sự cố với MySQL. Tôi không thể nói cho các cơ sở dữ liệu khác hoặc các nhà cung cấp khác.

0

Bạn có khả năng có thể có một vấn đề với Blobs hoặc trường ngày chuyên ngành như MSSQL DateTimeOffeet.

Ngoài ra tôi thấy một vấn đề "Không thể để chuyển đổi giữa java.lang.Character và JAVA_OBJECT."

Nếu tham số là một loại ký tự đơn lẻ.

if (param instanceof Character) { 
     param = "" + param; 
    } 
Các vấn đề liên quan