View Javadoc

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  }