Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Spring JDBC BeanPropertyRowMapper tak nie ('Y','N') na właściwości fasoli logicznej

Więc wymyśliłem, jak to zrobić. Rozszerzyłem typy logiczne BeanPropertyRowMapper i handler o jakiś niestandardowy kod przed przekazaniem kontroli do beanpropertyrowmapper dla pozostałych typów danych.

Uwaga:to działa dla mnie, ponieważ używam Oracle, a wszystkie kolumny typu „boolean” są ciągami z wartościami typu „y”, „tak”, „n” i „nie”.

Ci, którzy używają formatów liczbowych 1,0 lub innych, mogą potencjalnie je jeszcze ulepszyć, czyniąc je ogólnymi za pomocą mapy obiektów tak, pobierając obiekty z zestawu wyników i sprawdzając je na tej mapie. Mam nadzieję, że to pomoże komuś innemu w sytuacji takiej jak moja.

import java.beans.PropertyDescriptor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;

/**
 * Extends BeanPropertyRowMapper to allow for boolean fields
 * mapped to 'Y,'N' type column to get set correctly. Using stock BeanPropertyRowMapper
 * would throw a SQLException.
 * 
 */
public class ExtendedBeanPropertyRowMapper<T> extends BeanPropertyRowMapper<T> {

    //Contains valid true values
    public static final Set<String> TRUE_SET = new HashSet<String>(Arrays.asList("y", "yes", "true"));

    public ExtendedBeanPropertyRowMapper(Class<T> class1) {
        super(class1);
    }

    @Override
    /**
     * Override <code>getColumnValue</code> to add ability to map 'Y','N' type columns to
     * boolean properties.
     * 
     * @param rs is the ResultSet holding the data
     * @param index is the column index
     * @param pd the bean property that each result object is expected to match
     * (or <code>null</code> if none specified)
     * @return the Object value
     * @throws SQLException in case of extraction failure
     * @see org.springframework.jdbc.core.BeanPropertyRowMapper#getColumnValue(java.sql.ResultSet, int, PropertyDescriptor) 
     */
    protected Object getColumnValue(ResultSet rs, int index,
            PropertyDescriptor pd) throws SQLException {
        Class<?> requiredType = pd.getPropertyType();
        if (boolean.class.equals(requiredType) || Boolean.class.equals(requiredType)) {
            String stringValue = rs.getString(index);
            if(!StringUtils.isEmpty(stringValue) && TRUE_SET.contains(stringValue.toLowerCase())){
                return true;
            }
            else return false;
        }       
        return super.getColumnValue(rs, index, pd);
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wildfly nie udało się załadować modułu dla sterownika Oracle

  2. SQL Dynamic ASC i DESC

  3. 50 odcieni egzaminu certyfikacyjnego Oracle Database

  4. Wstaw datę do Oracle

  5. java.sql.SQLException:błąd we/wy:reset połączenia na serwerze linux