01: /*
02: * Copyright (c) 1998 - 2005 Versant Corporation
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * Versant Corporation - initial API and implementation
10: */
11: package com.versant.core.jdbc;
12:
13: import com.versant.core.jdbc.metadata.JdbcColumn;
14:
15: import javax.jdo.JDOFatalDataStoreException; //todo: only referenced in "throws"-clause, discuss, whether to remove this
16:
17: import java.sql.PreparedStatement;
18: import java.sql.SQLException;
19: import java.sql.ResultSet;
20:
21: /**
22: * JdbcConverters are used to convert a column from a JDBC ResultSet into a
23: * Java object and to set a parameter of a PreparedStatement from a Java
24: * object. There are also extra methods used to support columns that need
25: * special handling (e.g. Oracle LOBs).
26: */
27: public interface JdbcConverter {
28:
29: /**
30: * Is this converter for an Oracle style LOB column? Oracle LOBs require
31: * a hard coded a value into the insert/update statement instead of using
32: * a replaceable parameter and then select the value (if not null) and
33: * modify it.
34: */
35: public boolean isOracleStyleLOB();
36:
37: /**
38: * This is only called if isOracleStyleLOB returns true. Get the String
39: * to be embedded in an SQL insert/update statement when the value for
40: * this column is not null (e.g. "empty_clob()");
41: */
42: public String getOracleStyleLOBNotNullString();
43:
44: /**
45: * Get the value of col from rs at position index.
46: * @exception SQLException on SQL errors
47: * @exception JDOFatalDataStoreException if the ResultSet value is invalid
48: */
49: public Object get(ResultSet rs, int index, JdbcColumn col)
50: throws SQLException, JDOFatalDataStoreException;
51:
52: /**
53: * Set parameter index on ps to value (for col). This is not called for
54: * converters that return true for isOracleStyleLOB.
55: * @exception SQLException on SQL errors
56: * @exception JDOFatalDataStoreException if value is invalid
57: * @see #isOracleStyleLOB
58: */
59: public void set(PreparedStatement ps, int index, JdbcColumn col,
60: Object value) throws SQLException,
61: JDOFatalDataStoreException;
62:
63: /**
64: * Set parameter index on ps to value (for col). This special form is used
65: * when the value to be set is available as an int to avoid creating
66: * an wrapper instance.
67: * @exception SQLException on SQL errors
68: * @exception JDOFatalDataStoreException if value is invalid
69: */
70: public void set(PreparedStatement ps, int index, JdbcColumn col,
71: int value) throws SQLException, JDOFatalDataStoreException;
72:
73: /**
74: * This method is only called for converters that return true for
75: * isOracleStyleLOB. The LOB to be updated is at index in rs.
76: * @exception SQLException on SQL errors
77: * @exception JDOFatalDataStoreException if value is invalid
78: * @see #isOracleStyleLOB
79: */
80: public void set(ResultSet rs, int index, JdbcColumn col,
81: Object value) throws SQLException,
82: JDOFatalDataStoreException;
83:
84: /**
85: * Get the type of our expected value objects (e.g. java.util.Locale
86: * for a converter for Locale's). If the converter works with a primitive
87: * type e.g. Integer.TYPE then the corresponding wrapper class should be
88: * returned i.e. Integer.class.
89: */
90: public Class getValueType();
91: }
|