It is a lot easier to implement interface TypeHandlerCallback, this implementation will then be wrapped in a class that hides PreparedStatement and other artifacts.
For a good example which you can modify: http://www.mail-archive.com/[email protected]/msg02792.html Hope this helps, Niels -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: maandag 6 maart 2006 17:48 To: [email protected] Subject: Re: CHAR to BOOLEAN - Custom Type Handler 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 > >
