1 /***
2 *
3 * Copyright 2004 Hiram Chirino
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq.store.jdbc.adapter;
19
20 import java.io.ByteArrayInputStream;
21 import java.io.ByteArrayOutputStream;
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.sql.PreparedStatement;
25 import java.sql.ResultSet;
26 import java.sql.SQLException;
27
28 import org.codehaus.activemq.store.jdbc.StatementProvider;
29
30 /***
31 * This JDBCAdapter inserts and extracts BLOB data using the
32 * setBinaryStream()/getBinaryStream() operations.
33 *
34 * The databases/JDBC drivers that use this adapter are:
35 * <ul>
36 * <li>Axion</li>
37 * </ul>
38 *
39 * @version $Revision: 1.1 $
40 */
41 public class StreamJDBCAdapter extends DefaultJDBCAdapter {
42
43 public StreamJDBCAdapter() {
44 super();
45 }
46
47 public StreamJDBCAdapter(StatementProvider provider) {
48 super(provider);
49 }
50
51 /***
52 * @see org.codehaus.activemq.store.jdbc.adapter.DefaultJDBCAdapter#getBinaryData(java.sql.ResultSet, int)
53 */
54 protected byte[] getBinaryData(ResultSet rs, int index) throws SQLException {
55
56 try {
57 InputStream is = rs.getBinaryStream(index);
58 ByteArrayOutputStream os = new ByteArrayOutputStream(1024 * 4);
59
60 int ch;
61 while ((ch = is.read()) >= 0) {
62 os.write(ch);
63 }
64 is.close();
65 os.close();
66
67 return os.toByteArray();
68 } catch (IOException e) {
69 throw (SQLException)new SQLException("Error reading binary parameter: "+index).initCause(e);
70 }
71 }
72
73 /***
74 * @see org.codehaus.activemq.store.jdbc.adapter.DefaultJDBCAdapter#setBinaryData(java.sql.PreparedStatement, int, byte[])
75 */
76 protected void setBinaryData(PreparedStatement s, int index, byte[] data) throws SQLException {
77 s.setBinaryStream(index, new ByteArrayInputStream(data), data.length);
78 }
79
80 }