JDBCParameterUtilities.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.utils.jdbc;


  21. import java.io.InputStream;
  22. import java.math.BigDecimal;
  23. import java.math.BigInteger;
  24. import java.net.URI;
  25. import java.sql.PreparedStatement;
  26. import java.sql.ResultSet;
  27. import java.sql.SQLException;
  28. import java.sql.Timestamp;
  29. import java.util.Calendar;
  30. import java.util.Date;

  31. import org.openspcoop2.utils.TipiDatabase;
  32. import org.openspcoop2.utils.Utilities;
  33. import org.openspcoop2.utils.UtilsException;

  34. /**
  35.  * JDBCParameterUtilities
  36.  *
  37.  * @author Poli Andrea (apoli@link.it)
  38.  * @author $Author$
  39.  * @version $Rev$, $Date$
  40.  */
  41. public class JDBCParameterUtilities {

  42.     private TipiDatabase tipoDatabase = null;
  43.     private IJDBCAdapter jdbcAdapter = null;
  44.    
  45.     public JDBCParameterUtilities(TipiDatabase tipoDatabaseOpenSPCoop2) throws JDBCAdapterException{
  46.         this.tipoDatabase = tipoDatabaseOpenSPCoop2;
  47.         this.jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.tipoDatabase.getNome());
  48.     }
  49.    
  50.    
  51.     public void setParameter(PreparedStatement pstmt,int index,Object value, Class<?> type) throws SQLException, UtilsException{
  52.        
  53.         /**System.out.println("SET PARAMETER VALUE["+value+"] TYPE["+type.getName()+"]");*/
  54.        
  55.         if(type.isAssignableFrom(String.class)){
  56.             String valueWrapped = null;
  57.             if(value instanceof String){
  58.                 valueWrapped = (String) value;
  59.             }
  60.             else if(value instanceof Character){
  61.                 valueWrapped = ((Character)value).charValue()+"";
  62.             }
  63.             else if(value!=null){
  64.                 throw new UtilsException("Tipo["+type.getName()+"] non compatibile con l'oggetto fornito["+value.getClass().getName()+"]");
  65.             }
  66.             if(value==null){
  67.                 pstmt.setNull(index, java.sql.Types.VARCHAR);
  68.             }else{
  69.                 pstmt.setString(index, valueWrapped);
  70.             }
  71.         }
  72.        
  73.         else if(type.isAssignableFrom(Character.class) ||
  74.                 type.isAssignableFrom(char.class)){
  75.             Character valueWrapped = null;
  76.             String charValue = null;
  77.             if(value!=null){
  78.                 valueWrapped = (Character) value;
  79.                 char charPrimitiveValue = valueWrapped.charValue();
  80.                 charValue = valueWrapped.charValue()+"";
  81.                 if(charPrimitiveValue==0){ // == ''
  82.                     // ERROR: invalid byte sequence for encoding "UTF8": 0x00
  83.                     // Postgresql non supporta il carattere 'vuoto'. Si deve usare un null value
  84.                     charValue = null;
  85.                 }
  86.             }
  87.             if(charValue!=null){
  88.                 pstmt.setString(index, charValue );
  89.             }else{
  90.                 pstmt.setNull(index, java.sql.Types.VARCHAR);
  91.             }
  92.         }
  93.        
  94.         else if(type.isAssignableFrom(Boolean.class) ||
  95.                 type.isAssignableFrom(boolean.class)){
  96.             if(value!=null){
  97.                 Boolean valueWrapped = (Boolean) value;
  98.                 pstmt.setBoolean(index, valueWrapped);
  99.             }
  100.             else{
  101.                 if(TipiDatabase.ORACLE.equals(this.tipoDatabase) ||
  102.                         TipiDatabase.DB2.equals(this.tipoDatabase) ){
  103.                     pstmt.setNull(index, java.sql.Types.INTEGER);
  104.                 }
  105.                 else{
  106.                     pstmt.setNull(index, java.sql.Types.BOOLEAN);
  107.                 }
  108.             }
  109.         }
  110.        
  111.         else if(type.isAssignableFrom(Byte.class) ||
  112.                 type.isAssignableFrom(byte.class)){
  113.             if(value!=null){
  114.                 Byte valueWrapped = (Byte) value;
  115.                 /**pstmt.setByte(index, valueWrapped); tradotto come INT nel database*/
  116.                 pstmt.setInt(index, valueWrapped.intValue());
  117.             }
  118.             else{
  119.                 /**pstmt.setNull(index, java.sql.Types.BINARY);*/
  120.                 pstmt.setNull(index, java.sql.Types.INTEGER);
  121.             }
  122.         }
  123.        
  124.         else if(type.isAssignableFrom(Short.class) ||
  125.                 type.isAssignableFrom(short.class)){
  126.             if(value!=null){
  127.                 Short valueWrapped = (Short) value;
  128.                 pstmt.setShort(index, valueWrapped);
  129.             }
  130.             else{
  131.                 pstmt.setNull(index, java.sql.Types.INTEGER);
  132.             }
  133.         }
  134.        
  135.         else if(type.isAssignableFrom(Integer.class) ||
  136.                 type.isAssignableFrom(int.class)){
  137.             if(value!=null){
  138.                 Integer valueWrapped = (Integer) value;
  139.                 pstmt.setInt(index, valueWrapped);
  140.             }
  141.             else{
  142.                 pstmt.setNull(index, java.sql.Types.INTEGER);
  143.             }
  144.         }
  145.                        
  146.         else if(type.isAssignableFrom(Long.class) ||
  147.                 type.isAssignableFrom(long.class)){
  148.             if(value!=null){
  149.                 Long valueWrapped = (Long) value;
  150.                 pstmt.setLong(index, valueWrapped);
  151.             }
  152.             else{
  153.                 pstmt.setNull(index, java.sql.Types.BIGINT);
  154.             }
  155.         }
  156.        
  157.         else if(type.isAssignableFrom(java.math.BigInteger.class) ){
  158.             if(value!=null){
  159.                 java.math.BigInteger valueWrapped = (java.math.BigInteger) value;
  160.                 pstmt.setLong(index, valueWrapped.longValue());
  161.             }
  162.             else{
  163.                 pstmt.setNull(index, java.sql.Types.BIGINT);
  164.             }
  165.         }

  166.         else if(type.isAssignableFrom(Float.class) ||
  167.                 type.isAssignableFrom(float.class)){
  168.             if(value!=null){
  169.                 Float valueWrapped = (Float) value;
  170.                 pstmt.setFloat(index, valueWrapped);
  171.             }
  172.             else{
  173.                 pstmt.setNull(index, java.sql.Types.FLOAT);
  174.             }
  175.         }
  176.        
  177.         else if(type.isAssignableFrom(Double.class) ||
  178.                 type.isAssignableFrom(double.class)){
  179.             if(value!=null){
  180.                 Double valueWrapped = (Double) value;
  181.                 pstmt.setDouble(index, valueWrapped);
  182.             }
  183.             else{
  184.                 pstmt.setNull(index, java.sql.Types.DOUBLE);
  185.             }
  186.         }
  187.                
  188.         else if(type.isAssignableFrom(java.math.BigDecimal.class)){
  189.             if(value!=null){
  190.                 java.math.BigDecimal valueWrapped = (java.math.BigDecimal) value;
  191.                 pstmt.setDouble(index, valueWrapped.doubleValue());
  192.             }
  193.             else{
  194.                 pstmt.setNull(index, java.sql.Types.FLOAT);
  195.             }
  196.         }
  197.        
  198.         else if(type.isAssignableFrom(Date.class)){
  199.             Date valueWrapped = null;
  200.             if(value!=null){
  201.                 valueWrapped = (Date) value;
  202.             }
  203.             if(value!=null){
  204.                 pstmt.setTimestamp(index, new Timestamp((valueWrapped).getTime()));
  205.             }else{
  206.                 pstmt.setNull(index, java.sql.Types.TIMESTAMP);
  207.             }
  208.         }
  209.         else if(type.isAssignableFrom(java.sql.Date.class)){
  210.             java.sql.Date valueWrapped = null;
  211.             if(value!=null){
  212.                 valueWrapped = (java.sql.Date) value;
  213.             }
  214.             if(value!=null){
  215.                 pstmt.setTimestamp(index, new Timestamp((valueWrapped).getTime()));
  216.             }else{
  217.                 pstmt.setNull(index, java.sql.Types.TIMESTAMP);
  218.             }
  219.         }
  220.         else if(type.isAssignableFrom(Timestamp.class)){
  221.             if(value!=null){
  222.                 Timestamp valueWrapped = (Timestamp) value;
  223.                 pstmt.setTimestamp(index,valueWrapped);
  224.             }
  225.             else{
  226.                 pstmt.setNull(index, java.sql.Types.TIMESTAMP);
  227.             }
  228.         }
  229.         else if(type.isAssignableFrom(Calendar.class)){
  230.             Calendar valueWrapped = null;
  231.             if(value!=null){
  232.                 valueWrapped = (Calendar) value;
  233.             }
  234.             if(value!=null){
  235.                 pstmt.setTimestamp(index, new Timestamp((valueWrapped).getTime().getTime()));
  236.             }else{
  237.                 pstmt.setNull(index, java.sql.Types.TIMESTAMP);
  238.             }
  239.         }
  240.        
  241.         else if(type.isAssignableFrom(byte[].class)){
  242.             byte[] valueWrapped = null;
  243.             if(value!=null){
  244.                 valueWrapped = (byte[]) value;
  245.             }
  246.             this.jdbcAdapter.setBinaryData(pstmt, index, valueWrapped);
  247.         }
  248.        
  249.         else if(type.isAssignableFrom(URI.class)){
  250.             if(value!=null){
  251.                 URI valueWrapped = (URI) value;
  252.                 pstmt.setString(index,valueWrapped.toString());
  253.             }
  254.             else{
  255.                 pstmt.setNull(index, java.sql.Types.TIMESTAMP);
  256.             }
  257.         }
  258.        
  259.         else{
  260.             throw new SQLException("Tipo di oggetto (posizione "+index+") "+"non gestito: "+type.getClass().getName()+" - "+type);
  261.         }
  262.                
  263.     }
  264.    
  265.     public String readStringParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  266.         return (String) readParameter(rs, index, String.class);
  267.     }
  268.     public String readStringParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  269.         return (String) readParameter(rs, name, String.class);
  270.     }
  271.     public Character readCharParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  272.         return (Character) readParameter(rs, index, Character.class);
  273.     }
  274.     public Character readCharParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  275.         return (Character) readParameter(rs, name, Character.class);
  276.     }
  277.     public Boolean readBooleanParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  278.         return (Boolean) readParameter(rs, index, Boolean.class);
  279.     }
  280.     public Boolean readBooleanParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  281.         return (Boolean) readParameter(rs, name, Boolean.class);
  282.     }
  283.     public Byte readByteParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  284.         return (Byte) readParameter(rs, index, Byte.class);
  285.     }
  286.     public Byte readByteParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  287.         return (Byte) readParameter(rs, name, Byte.class);
  288.     }
  289.     public Short readShortParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  290.         return (Short) readParameter(rs, index, Short.class);
  291.     }
  292.     public Short readShortParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  293.         return (Short) readParameter(rs, name, Short.class);
  294.     }
  295.     public Integer readIntegerParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  296.         return (Integer) readParameter(rs, index, Integer.class);
  297.     }
  298.     public Integer readIntegerParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  299.         return (Integer) readParameter(rs, name, Integer.class);
  300.     }
  301.     public Long readLongParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  302.         return (Long) readParameter(rs, index, Long.class);
  303.     }
  304.     public Long readLongParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  305.         return (Long) readParameter(rs, name, Long.class);
  306.     }
  307.     public BigInteger readBigIntegerParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  308.         return (BigInteger) readParameter(rs, index, BigInteger.class);
  309.     }
  310.     public BigInteger readBigIntegerParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  311.         return (BigInteger) readParameter(rs, name, BigInteger.class);
  312.     }
  313.     public Float readFloatParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  314.         return (Float) readParameter(rs, index, Float.class);
  315.     }
  316.     public Float readFloatParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  317.         return (Float) readParameter(rs, name, Float.class);
  318.     }
  319.     public Double readDoubleParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  320.         return (Double) readParameter(rs, index, Double.class);
  321.     }
  322.     public Double readDoubleParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  323.         return (Double) readParameter(rs, name, Double.class);
  324.     }
  325.     public BigDecimal readBigDecimalParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  326.         return (BigDecimal) readParameter(rs, index, BigDecimal.class);
  327.     }
  328.     public BigDecimal readBigDecimalParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  329.         return (BigDecimal) readParameter(rs, name, BigDecimal.class);
  330.     }
  331.     public Date readDateParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  332.         return (Date) readParameter(rs, index, Date.class);
  333.     }
  334.     public Date readDateParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  335.         return (Date) readParameter(rs, name, Date.class);
  336.     }
  337.     public java.sql.Date readSqlDateParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  338.         return (java.sql.Date) readParameter(rs, index, java.sql.Date.class);
  339.     }
  340.     public java.sql.Date readSqlDateParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  341.         return (java.sql.Date) readParameter(rs, name, java.sql.Date.class);
  342.     }
  343.     public Timestamp readTimestampParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  344.         return (Timestamp) readParameter(rs, index, Timestamp.class);
  345.     }
  346.     public Timestamp readTimestampParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  347.         return (Timestamp) readParameter(rs, name, Timestamp.class);
  348.     }
  349.     public Calendar readCalendarParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  350.         return (Calendar) readParameter(rs, index, Calendar.class);
  351.     }
  352.     public Calendar readCalendarParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  353.         return (Calendar) readParameter(rs, name, Calendar.class);
  354.     }
  355.     public URI readURIParameter(ResultSet rs,int index) throws SQLException, UtilsException{
  356.         return (URI) readParameter(rs, index, URI.class);
  357.     }
  358.     public URI readURIParameter(ResultSet rs,String name) throws SQLException, UtilsException{
  359.         return (URI) readParameter(rs, name, URI.class);
  360.     }
  361.     public Object readParameter(ResultSet rs,int index,Class<?> type) throws SQLException, UtilsException{
  362.         return readParameter(rs, index, null, type, JDBCDefaultForXSDType.NONE);
  363.     }
  364.     public Object readParameter(ResultSet rs,String name,Class<?> type) throws SQLException, UtilsException{
  365.         return readParameter(rs, -1, name, type, JDBCDefaultForXSDType.NONE);
  366.     }
  367.     public Object readParameter(ResultSet rs,String name,Class<?> type,JDBCDefaultForXSDType jdbcDefaultForXSDType) throws SQLException, UtilsException{
  368.         return readParameter(rs, -1, name, type, jdbcDefaultForXSDType);
  369.     }
  370.     private Object readParameter(ResultSet rs,int index,String name,Class<?> type,JDBCDefaultForXSDType jdbcDefaultForXSDType) throws SQLException, UtilsException{
  371.        
  372.         if(type.toString().equals(String.class.toString())){
  373.             if(name!=null){
  374.                 return rs.getString(name);
  375.             }else{
  376.                 return rs.getString(index);
  377.             }
  378.         }
  379.         else if(type.toString().equals(Character.class.toString()) || type.toString().equals(char.class.toString())){
  380.             String s = null;
  381.             if(name!=null){
  382.                 s = rs.getString(name);
  383.             }else{
  384.                 s = rs.getString(index);
  385.             }
  386.             if(s!=null){
  387.                 return Character.valueOf(s.charAt(0));
  388.             }else{
  389.                 if(type.toString().equals(char.class.toString())){
  390.                     // primitive default value
  391.                     return '\u0000';
  392.                 }
  393.                 else{
  394.                     return null;
  395.                 }
  396.             }
  397.         }
  398.         else if(type.toString().equals(Boolean.class.toString()) || type.toString().equals(boolean.class.toString())){
  399.             boolean booleanValue;
  400.             if(name!=null){
  401.                 booleanValue = rs.getBoolean(name);
  402.             }else{
  403.                 booleanValue = rs.getBoolean(index);
  404.             }
  405.             if(type.toString().equals(Boolean.class.toString()) &&
  406.                 rs.wasNull()){
  407.                 return null;
  408.             }
  409.             return booleanValue;
  410.         }
  411.         else if(type.toString().equals(Byte.class.toString()) || type.toString().equals(byte.class.toString())){
  412.             byte byteValue;
  413.             if(name!=null){
  414.                 //return rs.getByte(name); tradotto come INT nel database
  415.                 byteValue = (byte) rs.getInt(name);
  416.             }else{
  417.                 //return rs.getByte(index); tradotto come INT nel database
  418.                 byteValue = (byte) rs.getInt(index);
  419.             }
  420.             if(byteValue==0 &&
  421.                 jdbcDefaultForXSDType!=null &&
  422.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  423.                 return null;
  424.             }
  425.             if(type.toString().equals(Byte.class.toString()) &&
  426.                 rs.wasNull()){
  427.                 return null;
  428.             }
  429.             return byteValue;
  430.         }
  431.         else if(type.toString().equals(Short.class.toString()) || type.toString().equals(short.class.toString())){
  432.             short shortValue;
  433.             if(name!=null){
  434.                 shortValue = rs.getShort(name);
  435.             }else{
  436.                 shortValue = rs.getShort(index);
  437.             }
  438.             if(shortValue==0 &&
  439.                 jdbcDefaultForXSDType!=null &&
  440.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  441.                 return null;
  442.             }
  443.             if(type.toString().equals(Short.class.toString()) &&
  444.                 rs.wasNull()){
  445.                 return null;
  446.             }
  447.             return shortValue;
  448.         }
  449.         else if(type.toString().equals(Integer.class.toString()) || type.toString().equals(int.class.toString())){
  450.             int intValue;
  451.             if(name!=null){
  452.                 intValue = rs.getInt(name);
  453.             }else{
  454.                 intValue = rs.getInt(index);
  455.             }
  456.             if(intValue==0 &&
  457.                 jdbcDefaultForXSDType!=null &&
  458.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  459.                 return null;
  460.             }
  461.             if(type.toString().equals(Integer.class.toString()) &&
  462.                 rs.wasNull()){
  463.                 return null;
  464.             }
  465.             return intValue;
  466.         }
  467.         else if(type.toString().equals(Long.class.toString()) || type.toString().equals(long.class.toString())){
  468.             long longValue;
  469.             if(name!=null){
  470.                 longValue = rs.getLong(name);
  471.             }else{
  472.                 longValue = rs.getLong(index);
  473.             }
  474.             if(longValue==0L &&
  475.                 jdbcDefaultForXSDType!=null &&
  476.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  477.                 return null;
  478.             }
  479.             if(type.toString().equals(Long.class.toString()) &&
  480.                 rs.wasNull()){
  481.                 return null;
  482.             }
  483.             return longValue;
  484.         }
  485.         else if(type.toString().equals(BigInteger.class.toString())){
  486.             long longValue;
  487.             if(name!=null){
  488.                 longValue = rs.getLong(name);
  489.             }else{
  490.                 longValue = rs.getLong(index);
  491.             }
  492.             if(longValue==0L &&
  493.                 jdbcDefaultForXSDType!=null &&
  494.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  495.                 return null;
  496.             }
  497.             if(rs.wasNull()){
  498.                 return null;
  499.             }
  500.             return BigInteger.valueOf(longValue);
  501.         }
  502.         else if(type.toString().equals(Float.class.toString()) || type.toString().equals(float.class.toString())){
  503.             float floatValue;
  504.             if(name!=null){
  505.                 floatValue = rs.getFloat(name);
  506.             }else{
  507.                 floatValue = rs.getFloat(index);
  508.             }
  509.             if(floatValue==0.0f &&
  510.                 jdbcDefaultForXSDType!=null &&
  511.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  512.                 return null;
  513.             }
  514.             if(type.toString().equals(Float.class.toString()) &&
  515.                 rs.wasNull()){
  516.                 return null;
  517.             }
  518.             return floatValue;
  519.         }
  520.         else if(type.toString().equals(Double.class.toString()) || type.toString().equals(double.class.toString())){
  521.             double doubleValue;
  522.             if(name!=null){
  523.                 doubleValue = rs.getDouble(name);
  524.             }else{
  525.                 doubleValue = rs.getDouble(index);
  526.             }
  527.             if(doubleValue==0.0d &&
  528.                 jdbcDefaultForXSDType!=null &&
  529.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  530.                 return null;
  531.             }
  532.             if(type.toString().equals(Double.class.toString()) &&
  533.                 rs.wasNull()){
  534.                 return null;
  535.             }
  536.             return doubleValue;
  537.         }
  538.         else if(type.toString().equals(BigDecimal.class.toString())){
  539.             double doubleValue;
  540.             if(name!=null){
  541.                 doubleValue = rs.getDouble(name);
  542.             }else{
  543.                 doubleValue = rs.getDouble(index);
  544.             }
  545.             if(doubleValue==0.0d &&
  546.                 jdbcDefaultForXSDType!=null &&
  547.                 JDBCDefaultForXSDType.FORCE_ZERO_AS_NULL.equals(jdbcDefaultForXSDType)){
  548.                 return null;
  549.             }
  550.             if(rs.wasNull()){
  551.                 return null;
  552.             }
  553.             return BigDecimal.valueOf(doubleValue);
  554.         }
  555.         else if(type.toString().equals(Date.class.toString())){
  556.             Timestamp ts = null;
  557.             if(name!=null){
  558.                 ts = rs.getTimestamp(name);
  559.             }else{
  560.                 ts = rs.getTimestamp(index);
  561.             }
  562.             if(ts!=null){
  563.                 return new Date(ts.getTime());
  564.             }
  565.             else{
  566.                 return null;
  567.             }
  568.         }
  569.         else if(type.toString().equals(java.sql.Date.class.toString())){
  570.             Timestamp ts = null;
  571.             if(name!=null){
  572.                 ts = rs.getTimestamp(name);
  573.             }else{
  574.                 ts = rs.getTimestamp(index);
  575.             }
  576.             if(ts!=null){
  577.                 return new java.sql.Date(ts.getTime());
  578.             }
  579.             else{
  580.                 return null;
  581.             }
  582.         }
  583.         else if(type.toString().equals(Timestamp.class.toString())){
  584.             if(name!=null){
  585.                 return rs.getTimestamp(name);
  586.             }else{
  587.                 return rs.getTimestamp(index);
  588.             }
  589.         }
  590.         else if(type.toString().equals(Calendar.class.toString())){
  591.             Timestamp ts = null;
  592.             if(name!=null){
  593.                 ts = rs.getTimestamp(name);
  594.             }else{
  595.                 ts = rs.getTimestamp(index);
  596.             }
  597.             if(ts!=null){
  598.                 Calendar c = Calendar.getInstance();
  599.                 c.setTime(new Date(ts.getTime()));
  600.                 return c;
  601.             }
  602.             else{
  603.                 return null;
  604.             }
  605.         }
  606.         else if(type.isAssignableFrom(byte[].class)){
  607.             /**if(name!=null){
  608.                 return this.jdbcAdapter.getBinaryData(rs, name);
  609.             }
  610.             else{
  611.                 return this.jdbcAdapter.getBinaryData(rs, index);
  612.             }*/
  613.             // OP-686: si preferisce il metodo getBinaryStream per i motivi descritti nell'Issue
  614.             InputStream binaryStream = null;
  615.             if(name!=null){
  616.                 binaryStream = this.jdbcAdapter.getBinaryStream(rs, name);
  617.             }
  618.             else{
  619.                 binaryStream = this.jdbcAdapter.getBinaryStream(rs, index);
  620.             }
  621.             if(binaryStream == null) {
  622.                 return null;
  623.             }
  624.             try {
  625.                 return Utilities.getAsByteArray(binaryStream, false); // non lancio eccezione se l'input stream ritornato e' vuoto (succede in caso si salva una stringa vuota su alcuni database)
  626.             } finally {
  627.                 try {binaryStream.close();} catch(Exception e) {
  628.                     // ignore
  629.                 }
  630.             }
  631.         }
  632.         else if(type.isAssignableFrom(URI.class)){
  633.             String uri = null;
  634.             if(name!=null){
  635.                 uri = rs.getString(name);
  636.             }else{
  637.                 uri = rs.getString(index);
  638.             }
  639.             if(uri!=null){
  640.                 try{
  641.                     return new URI(uri);
  642.                 }catch(Exception e){
  643.                     throw new UtilsException(e.getMessage(),e);
  644.                 }
  645.             }
  646.             else{
  647.                 return null;
  648.             }
  649.         }
  650.         else{
  651.             if(name!=null){
  652.                 throw new SQLException("Tipo di oggetto (nome "+name+") non gestito: "+type.getClass().getName()+" - "+type);
  653.             }else{
  654.                 throw new SQLException("Tipo di oggetto (posizione "+(index)+") non gestito: "+type.getClass().getName()+" - "+type);
  655.             }
  656.         }
  657.     }
  658. }