1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.dbunit.dataset.datatype;
22
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import java.io.ByteArrayInputStream;
27 import java.io.ByteArrayOutputStream;
28 import java.io.IOException;
29 import java.io.InputStream;
30 import java.sql.PreparedStatement;
31 import java.sql.ResultSet;
32 import java.sql.SQLException;
33
34
35
36
37
38
39
40
41 public class BinaryStreamDataType extends BytesDataType
42 {
43
44
45
46
47 private static final Logger logger = LoggerFactory.getLogger(BinaryStreamDataType.class);
48
49 public BinaryStreamDataType(String name, int sqlType)
50 {
51 super(name, sqlType);
52 }
53
54 public Object getSqlValue(int column, ResultSet resultSet)
55 throws SQLException, TypeCastException
56 {
57 if(logger.isDebugEnabled())
58 logger.debug("getSqlValue(column={}, resultSet={}) - start", new Integer(column), resultSet);
59
60 InputStream in = resultSet.getBinaryStream(column);
61 if (in == null || resultSet.wasNull())
62 {
63 return null;
64 }
65
66 try
67 {
68 ByteArrayOutputStream out = new ByteArrayOutputStream();
69 byte[] buffer = new byte[32];
70 int length = in.read(buffer);
71 while (length != -1)
72 {
73 out.write(buffer, 0, length);
74 length = in.read(buffer);
75 }
76 return out.toByteArray();
77 }
78 catch (IOException e)
79 {
80 throw new TypeCastException(e);
81 }
82 }
83
84
85
86
87
88
89 public void setSqlValue(Object value, int column, PreparedStatement statement)
90 throws SQLException, TypeCastException
91 {
92 if(logger.isDebugEnabled())
93 logger.debug("setSqlValue(value={}, column={}, statement={}) - start",
94 new Object[]{value, new Integer(column), statement} );
95
96 byte[] bytes = (byte[])typeCast(value);
97 if(value==null || bytes==null)
98 {
99 logger.debug("Setting SQL column value to <null>");
100 statement.setNull(column, getSqlType());
101 }
102 else
103 {
104 ByteArrayInputStream in = new ByteArrayInputStream(bytes);
105 statement.setBinaryStream(column, in, bytes.length);
106 }
107
108 }
109
110 }