private boolean setComplexParameterValue(final AbstractSession session, final PreparedStatement statement, final int index, final Object parameter) throws SQLException {
if (parameter == null) {
statement.setNull(index, getJDBCType((Class)null));
} else if (parameter instanceof DatabaseField) {
int jdbcType = getJDBCType((DatabaseField)parameter);
statement.setNull(index, jdbcType);
} else if ((parameter instanceof byte[]) && (usesStreamsForBinding())) {
ByteArrayInputStream inputStream = new ByteArrayInputStream((byte[])parameter);
statement.setBinaryStream(index, inputStream, ((byte[])parameter).length);
} else if ((parameter instanceof String) && usesStringBinding() && (((String)parameter).length() > getStringBindingSize())) {
CharArrayReader reader = new CharArrayReader(((String)parameter).toCharArray());
statement.setCharacterStream(index, reader, ((String)parameter).length());
} else if (parameter instanceof BindCallCustomParameter) {
((BindCallCustomParameter)(parameter)).set(this, statement, index, session);
} else {
return false;
}
return true;
}