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