NCHAR, NVARCHAR Oracle support ------------------------------ Key: IBATIS-541 URL: https://issues.apache.org/jira/browse/IBATIS-541 Project: iBatis for Java Issue Type: Wish Components: SQL Maps Reporter: Denis Nelubin Priority: Minor
Oracle JDBC driver has strange support of national character data types. It's required to call oracle.jdbc.OraclePreparedStatement.setFormOfUse(int paramIndex, short formOfUse) method before calling to setString() or registerOutParameter() (for OracleCallableStatement). Otherwise the national characters will be converted to the database encoding which can cause data loss. The first form of use (on setting parameters of prepared statement) can be solved by such custom TypeHandler: import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.OraclePreparedStatement; import org.apache.commons.dbcp.DelegatingStatement; import com.ibatis.sqlmap.engine.type.StringTypeHandler; public class NVarcharTypeHandler extends StringTypeHandler { public void setParameter(PreparedStatement ps, int i, Object parameter, String jdbcType) throws SQLException { Statement delegate = ps; while (delegate instanceof DelegatingStatement) { delegate = ((DelegatingStatement)delegate).getDelegate(); } if (delegate instanceof OraclePreparedStatement) { ((OraclePreparedStatement)delegate).setFormOfUse(i, OraclePreparedStatement.FORM_NCHAR); } ps.setString(i, ((String) parameter)); } } But the second form of use (on registering output parameters) requires changes in SQL Maps control flow. There is no extension point to get access to CallableStatement before registering output parameters. I propose to extend TypeHandler interface by adding such method: void registerOutParameter(CallableStatement cs, int columnIndex, String jdbcType, Integer numbericScale) and modifying SqlExecutor to call this method before registering output parameters. Also it will be good to include support of this Oracle data types into base distribution. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.