package jef.database.dialect.type; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import jef.database.ORMConfig; import jef.database.dialect.DatabaseDialect; import jef.database.jdbc.result.IResultSet; import jef.tools.IOUtils; public class BlobStringMapping extends AColumnMapping { public Object jdbcSet(PreparedStatement st, Object value, int index, DatabaseDialect session) throws SQLException { if (value == null) { st.setNull(index, session.getImplementationSqlType(Types.BLOB)); } else { byte[] buf = ((String) value).getBytes(ORMConfig.getInstance().getDbEncodingCharset()); st.setBytes(index, buf); } return value; } public int getSqlType() { return Types.BLOB; } @Override protected String getSqlExpression(Object value, DatabaseDialect profile) { throw new UnsupportedOperationException(); } public boolean isLob() { return true; } public static int getLength(String str) { return ORMConfig.getInstance().getDbEncodingCharset().encode(str).limit(); } public Object jdbcGet(IResultSet rs, int n) throws SQLException { Object obj = rs.getObject(n); if (obj == null) return null; if (obj.getClass().isArray()) { byte[] data = (byte[]) obj; return new String(data, 0, data.length, ORMConfig.getInstance().getDbEncodingCharset()); } Blob blob = (Blob) obj; InputStream in = blob.getBinaryStream(); try { return IOUtils.asString(in, ORMConfig.getInstance().getDbEncoding(), true); } catch (IOException e) { throw new IllegalStateException(e); } } @Override protected Class<?> getDefaultJavaType() { return String.class; } @Override public void jdbcUpdate(ResultSet rs, String columnName, Object value, DatabaseDialect dialect) throws SQLException { byte[] buf = ((String) value).getBytes(ORMConfig.getInstance().getDbEncodingCharset()); rs.updateBytes(columnName, buf); } }