ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guido García Bernardo <ggb...@tid.es>
Subject Re: CHAR to BOOLEAN - Custom Type Handler
Date Mon, 06 Mar 2006 16:48:25 GMT
Thank you Larry, it worked.

I think it could be simpler to use the same strings used by the Boolean 
class ("true" and "false", ignoring case).  At least to define them as 
the default values for TRUE_STRING/FALSE_STRING.

package com.ibatis.sqlmap.engine.type;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.ibatis.sqlmap.engine.type.TypeHandler;

public class TrueFalseTypeHandler implements TypeHandler {

    public void setParameter(PreparedStatement ps, int i, Object 
parameter, String jdbcType) throws SQLException {
        ps.setString( i, ((Boolean) parameter).toString() );
    }

    public Object getResult(ResultSet rs, String columnName) throws 
SQLException {
        return Boolean.valueOf( rs.getString( columnName ) );
    }

    public Object getResult(ResultSet rs, int columnIndex) throws 
SQLException {
        return Boolean.valueOf( rs.getString( columnIndex ) );
    }

    public Object getResult(CallableStatement cs, int columnIndex) 
throws SQLException {
        return Boolean.valueOf( cs.getString( columnIndex ) );
    }

    public Object valueOf(String string) {       
        return Boolean.valueOf( string );       
    }

    public boolean equals(Object object, String string) {
        return  Boolean.valueOf( string ).equals( object );
    }
}

Best regards,
Guido García Bernardo.

Larry Meadors escribió:
> I think this will work:
>
> ===
>
> package com.ibatis.sqlmap.engine.type;
>
> import java.sql.PreparedStatement;
> import java.sql.SQLException;
> import java.sql.ResultSet;
> import java.sql.CallableStatement;
>
> public class BooleanYNTypeHandler implements TypeHandler {
>   protected String TRUE_STRING = "Y";
>   protected String FALSE_STRING = "N";
>   public void setParameter(PreparedStatement ps, int i, Object
> parameter, String jdbcType) throws SQLException {
>     ps.setString(i, boolToString((Boolean) parameter));
>   }
>
>   public Object getResult(ResultSet rs, String columnName) throws SQLException {
>     return stringToBool(rs.getString(columnName));
>   }
>
>   public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
>     return stringToBool(rs.getString(columnIndex));
>   }
>
>   public Object getResult(CallableStatement cs, int columnIndex)
> throws SQLException {
>     return stringToBool(cs.getString(columnIndex));
>   }
>
>   public Object valueOf(String s) {
>     return stringToBool(s);
>   }
>
>   public boolean equals(Object object, String string) {
>     return  string.equalsIgnoreCase(boolToString((Boolean) object));
>   }
>   private String boolToString(Boolean b){
>     if(null == b) return null;
>     return b.booleanValue()?TRUE_STRING:FALSE_STRING;
>   }
>   private Boolean stringToBool(String s){
>     if (null == s) return null;
>     return Boolean.valueOf(s.equalsIgnoreCase(TRUE_STRING));
>   }
> }
>
> ===
>
> Let me know if it does, and we'll try to add it to the default type
> handlers in the next release.
>
> It would be a real simple exercise to add a BooleanTFTypeHandler, too
> - just subclass this and make the default constructor set TRUE_STRING
> = "T" and FALSE_STRING = "F".
>
> Larry
>
>   

Mime
View raw message