01: package org.dbunit.dataset.datatype;
02:
03: import org.slf4j.Logger;
04: import org.slf4j.LoggerFactory;
05:
06: import java.io.ByteArrayInputStream;
07: import java.io.ByteArrayOutputStream;
08: import java.io.IOException;
09: import java.io.InputStream;
10: import java.sql.PreparedStatement;
11: import java.sql.ResultSet;
12: import java.sql.SQLException;
13:
14: public class BinaryStreamDataType extends BytesDataType {
15:
16: /**
17: * Logger for this class
18: */
19: private static final Logger logger = LoggerFactory
20: .getLogger(BinaryStreamDataType.class);
21:
22: public BinaryStreamDataType(String name, int sqlType) {
23: super (name, sqlType);
24: }
25:
26: public Object getSqlValue(int column, ResultSet resultSet)
27: throws SQLException, TypeCastException {
28: logger.debug("getSqlValue(column=" + column + ", resultSet="
29: + resultSet + ") - start");
30:
31: InputStream in = resultSet.getBinaryStream(column);
32: if (in == null || resultSet.wasNull()) {
33: return null;
34: }
35:
36: try {
37: ByteArrayOutputStream out = new ByteArrayOutputStream();
38: byte[] buffer = new byte[32];
39: int length = in.read(buffer);
40: while (length != -1) {
41: out.write(buffer, 0, length);
42: length = in.read(buffer);
43: }
44: return out.toByteArray();
45: } catch (IOException e) {
46: logger.error("getSqlValue()", e);
47:
48: throw new TypeCastException(e);
49: }
50: }
51:
52: public void setSqlValue(Object value, int column,
53: PreparedStatement statement) throws SQLException,
54: TypeCastException {
55: logger.debug("setSqlValue(value=" + value + ", column="
56: + column + ", statement=" + statement + ") - start");
57:
58: byte[] bytes = (byte[]) typeCast(value);
59: ByteArrayInputStream in = new ByteArrayInputStream(bytes);
60: statement.setBinaryStream(column, in, bytes.length);
61: }
62:
63: }
|