01: /*
02: * JBoss, Home of Professional Open Source.
03: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
04: * as indicated by the @author tags. See the copyright.txt file in the
05: * distribution for a full listing of individual contributors.
06: *
07: * This is free software; you can redistribute it and/or modify it
08: * under the terms of the GNU Lesser General Public License as
09: * published by the Free Software Foundation; either version 2.1 of
10: * the License, or (at your option) any later version.
11: *
12: * This software is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this software; if not, write to the Free
19: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21: */
22: package org.jboss.test.cmp2.lob;
23:
24: import java.sql.PreparedStatement;
25: import java.sql.SQLException;
26: import java.sql.Types;
27: import java.sql.ResultSet;
28: import java.sql.Blob;
29: import java.io.IOException;
30:
31: import org.jboss.ejb.plugins.cmp.jdbc.JDBCParameterSetter;
32: import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
33: import org.jboss.logging.Logger;
34: import org.jboss.invocation.MarshalledValue;
35:
36: /**
37: @author Scott.Stark@jboss.org
38: @version $Revision: 57211 $
39: */
40: public class GetSetObjectParameter implements JDBCParameterSetter,
41: JDBCResultSetReader {
42: public Object get(ResultSet rs, int index, Class destination,
43: Logger log) throws SQLException {
44: Object value = rs.getObject(index);
45: log.debug("get: i=" + index + ", destination=" + destination
46: + ", value=" + value);
47: Object result = value;
48: if (rs.wasNull()) {
49: result = null;
50: } else if (value instanceof MarshalledValue) {
51: MarshalledValue mv = (MarshalledValue) value;
52: try {
53: result = mv.get();
54: } catch (Exception e) {
55: SQLException sqe = new SQLException(
56: "Unable to extract MarshalledValue");
57: sqe.initCause(e);
58: throw sqe;
59: }
60: }
61: return result;
62: }
63:
64: public void set(PreparedStatement ps, int index, int jdbcType,
65: Object value, Logger log) throws SQLException {
66: log.debug("set: i=" + index + ", jdbcType=" + jdbcType
67: + ", value=" + value);
68: if (value instanceof MarshalledValue) {
69: MarshalledValue mv = (MarshalledValue) value;
70: try {
71: value = mv.get();
72: } catch (Exception e) {
73: SQLException sqe = new SQLException(
74: "Unable to extract MarshalledValue");
75: sqe.initCause(e);
76: throw sqe;
77: }
78: }
79:
80: switch (jdbcType) {
81: case Types.BLOB: {
82: ps.setObject(index, value, jdbcType);
83: break;
84: }
85: case Types.OTHER:
86: ps.setObject(index, value);
87: break;
88: default:
89: throw new SQLException("Unsupported jdbcType: " + jdbcType);
90: }
91: }
92: }
|