KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lateralnz > c3d > DCPreparedStatement


1 /* ====================================================================
2  * The LateralNZ Software License, Version 1.0
3  *
4  * Copyright (c) 2003 LateralNZ. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by
21  * LateralNZ (http://www.lateralnz.org/) and other third parties."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. The names "LateralNZ" must not be used to endorse or promote
26  * products derived from this software without prior written
27  * permission. For written permission, please
28  * contact oss@lateralnz.org.
29  *
30  * 5. Products derived from this software may not be called "Panther",
31  * or "Lateral" or "LateralNZ", nor may "PANTHER" or "LATERAL" or
32  * "LATERALNZ" appear in their name, without prior written
33  * permission of LateralNZ.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of LateralNZ. For more
51  * information on Lateral, please see http://www.lateralnz.com/ or
52  * http://www.lateralnz.org
53  *
54  */

55 package org.lateralnz.c3d;
56
57 import java.sql.Array JavaDoc;
58 import java.sql.ParameterMetaData JavaDoc;
59 import java.sql.PreparedStatement JavaDoc;
60 import java.sql.ResultSet JavaDoc;
61 import java.sql.ResultSetMetaData JavaDoc;
62 import java.sql.Statement JavaDoc;
63 import java.sql.SQLException JavaDoc;
64 import java.sql.Types JavaDoc;
65
66 import org.lateralnz.common.util.Constants;
67 import org.lateralnz.common.util.DAOUtils;
68 import org.lateralnz.common.util.StringUtils;
69
70 import org.lateralnz.c3d.util.Column;
71 import org.lateralnz.c3d.util.ResultWrapper;
72
73 public class DCPreparedStatement extends DCStatement implements PreparedStatement JavaDoc, Constants {
74   private static final byte[] NULL_BYTES = "null".getBytes();
75   protected PreparedStatement JavaDoc realPS;
76   protected PreparedStatement JavaDoc queryUpdateRowsPS = null;
77   protected String JavaDoc queryUpdateRowsSQL = EMPTY;
78   
79   private int paramCount = 0;
80   protected Column[] params;
81   
82   public DCPreparedStatement(DCConnection conn, String JavaDoc sql, int resultsetType, int resultsetConcurrency, int resultsetHoldability, int autoGeneratedKeys, int[] columnIndexes, String JavaDoc[] columnNames) throws SQLException JavaDoc {
83     super(conn, resultsetType, resultsetConcurrency, resultsetHoldability);
84     this.statementType = PREPARED;
85     setSQL(sql);
86         
87     if (resultsetType != Integer.MIN_VALUE && resultsetConcurrency != Integer.MIN_VALUE && resultsetHoldability != Integer.MIN_VALUE) {
88       realPS = conn.getRealConnection().prepareStatement(sql, resultsetType, resultsetConcurrency, resultsetHoldability);
89     }
90     else if (resultsetType != Integer.MIN_VALUE && resultsetConcurrency != Integer.MIN_VALUE) {
91       realPS = conn.getRealConnection().prepareStatement(sql, resultsetType, resultsetConcurrency);
92     }
93     else if (autoGeneratedKeys != Integer.MIN_VALUE) {
94       realPS = conn.getRealConnection().prepareStatement(sql, autoGeneratedKeys);
95     }
96     else if (columnIndexes != null) {
97       realPS = conn.getRealConnection().prepareStatement(sql, columnIndexes);
98     }
99     else if (columnNames != null) {
100       realPS = conn.getRealConnection().prepareStatement(sql, columnNames);
101     }
102     else {
103       realPS = conn.getRealConnection().prepareStatement(sql);
104     }
105     
106     realStatement = realPS;
107     
108     paramCount = StringUtils.countOccurrences(sql, '?');
109     clearParameters();
110   }
111   
112   public void addBatch() throws SQLException JavaDoc {
113   }
114   
115   public void clearParameters() throws SQLException JavaDoc {
116     realPS.clearParameters();
117     params = new Column[paramCount];
118     for (int i = 0; i < paramCount; i++) {
119       params[i] = new Column();
120     }
121   }
122   
123   public void close() throws SQLException JavaDoc {
124     try {
125       super.close();
126     }
127     finally {
128       DAOUtils.close(queryUpdateRowsPS);
129     }
130   }
131   
132   public boolean execute() throws SQLException JavaDoc {
133     ResultWrapper rw = conn.getDatabaseEngine().execute(this);
134     if (rw != null) {
135       rs = rw.rs;
136       updateCount = rw.updateCount;
137     }
138     
139     if (rs != null) {
140       return true;
141     }
142     else {
143       return false;
144     }
145   }
146   
147   public ResultSet JavaDoc executeQuery() throws SQLException JavaDoc {
148     if (execute()) {
149       return getResultSet();
150     }
151     else {
152       throw new SQLException JavaDoc("query failed");
153     }
154   }
155   
156   public int executeUpdate() throws SQLException JavaDoc {
157     if (!execute()) {
158       return getUpdateCount();
159     }
160     else {
161       return -1;
162     }
163   }
164   
165   public ResultSetMetaData JavaDoc getMetaData() throws SQLException JavaDoc {
166     if (getResultSet() != null) {
167       return getResultSet().getMetaData();
168     }
169     else {
170       throw new SQLException JavaDoc("operation not supported");
171     }
172   }
173   
174   public ParameterMetaData JavaDoc getParameterMetaData() throws SQLException JavaDoc {
175     return realPS.getParameterMetaData();
176   }
177   
178   public Statement JavaDoc getRealStatement() {
179     return realPS;
180   }
181   
182   public void setArray(int param, Array JavaDoc array) throws SQLException JavaDoc {
183     realPS.setArray(param, array);
184     nocaching = true;
185   }
186   
187   public void setAsciiStream(int param, java.io.InputStream JavaDoc inputStream, int param2) throws SQLException JavaDoc {
188     realPS.setAsciiStream(param, inputStream, param2);
189     nocaching = true;
190   }
191   
192   public void setBigDecimal(int param, java.math.BigDecimal JavaDoc bigDecimal) throws SQLException JavaDoc {
193     realPS.setBigDecimal(param, bigDecimal);
194     param--;
195     params[param].setObjectValue(bigDecimal);
196     params[param].setType(Types.NUMERIC);
197   }
198   
199   public void setBinaryStream(int param, java.io.InputStream JavaDoc inputStream, int param2) throws SQLException JavaDoc {
200     realPS.setBinaryStream(param, inputStream, param2);
201     nocaching = true;
202   }
203   
204   public void setBlob(int param, java.sql.Blob JavaDoc blob) throws SQLException JavaDoc {
205     realPS.setBlob(param, blob);
206     nocaching = true;
207   }
208   
209   public void setBoolean(int param, boolean param1) throws SQLException JavaDoc {
210     realPS.setBoolean(param, param1);
211     param--;
212     if (param1) {
213       params[param].setObjectValue(TRUE);
214     }
215     else {
216       params[param].setObjectValue(FALSE);
217     }
218     params[param].setType(Types.BOOLEAN);
219   }
220   
221   public void setByte(int param, byte param1) throws SQLException JavaDoc {
222     realPS.setByte(param, param1);
223     param--;
224     params[param].setObjectValue(new Byte JavaDoc(param1));
225     params[param].setType(Types.TINYINT);
226   }
227   
228   public void setBytes(int param, byte[] values) throws SQLException JavaDoc {
229     realPS.setBytes(param, values);
230     param--;
231     params[param].setValue(values);
232     params[param].setType(Types.VARBINARY);
233   }
234   
235   public void setCharacterStream(int param, java.io.Reader JavaDoc reader, int param2) throws SQLException JavaDoc {
236     realPS.setCharacterStream(param, reader, param2);
237     nocaching = true;
238   }
239   
240   public void setClob(int param, java.sql.Clob JavaDoc clob) throws SQLException JavaDoc {
241     realPS.setClob(param, clob);
242     nocaching = true;
243   }
244   
245   public void setDate(int param, java.sql.Date JavaDoc date) throws SQLException JavaDoc {
246     realPS.setDate(param, date);
247     param--;
248     String JavaDoc s = date.toString();
249     params[param].setObjectValue(s);
250     params[param].setType(Types.DATE);
251   }
252   
253   public void setDate(int param, java.sql.Date JavaDoc date, java.util.Calendar JavaDoc calendar) throws SQLException JavaDoc {
254     realPS.setDate(param, date, calendar);
255     param--;
256     String JavaDoc s = date.toString();
257     params[param].setObjectValue(s);
258     params[param].setType(Types.DATE);
259   }
260   
261   public void setDouble(int param, double param1) throws SQLException JavaDoc {
262     realPS.setDouble(param, param1);
263     param--;
264     params[param].setObjectValue(new Double JavaDoc(param1));
265     params[param].setType(Types.DOUBLE);
266   }
267   
268   public void setFloat(int param, float param1) throws SQLException JavaDoc {
269     realPS.setFloat(param, param1);
270     param--;
271     params[param].setObjectValue(new Float JavaDoc(param1));
272     params[param].setType(Types.FLOAT);
273   }
274   
275   public void setInt(int param, int param1) throws SQLException JavaDoc {
276     realPS.setInt(param, param1);
277     param--;
278     params[param].setObjectValue(new Integer JavaDoc(param1));
279     params[param].setType(Types.INTEGER);
280   }
281   
282   public void setLong(int param, long param1) throws SQLException JavaDoc {
283     realPS.setLong(param, param1);
284     param--;
285     params[param].setObjectValue(new Long JavaDoc(param1));
286     params[param].setType(Types.BIGINT);
287   }
288   
289   public void setNull(int param, int param1) throws SQLException JavaDoc {
290     realPS.setNull(param, param1);
291     param--;
292     params[param].setType(param1);
293     params[param].setNull(true);
294   }
295   
296   public void setNull(int param, int param1, String JavaDoc str) throws SQLException JavaDoc {
297     realPS.setNull(param, param1, str);
298     param--;
299     params[param].setObjectValue(str);
300     params[param].setType(param1);
301     params[param].setNull(true);
302   }
303   
304   public void setObject(int param, Object JavaDoc obj) throws SQLException JavaDoc {
305     realPS.setObject(param, obj);
306     nocaching = true;
307   }
308   
309   public void setObject(int param, Object JavaDoc obj, int param2) throws SQLException JavaDoc {
310     realPS.setObject(param, obj, param2);
311     nocaching = true;
312   }
313   
314   public void setObject(int param, Object JavaDoc obj, int param2, int param3) throws SQLException JavaDoc {
315     realPS.setObject(param, obj, param2, param3);
316     nocaching = true;
317   }
318   
319   public void setRef(int param, java.sql.Ref JavaDoc ref) throws SQLException JavaDoc {
320     realPS.setRef(param, ref);
321     nocaching = true;
322   }
323   
324   public void setShort(int param, short param1) throws SQLException JavaDoc {
325     realPS.setShort(param, param1);
326     param--;
327     params[param].setObjectValue(new Short JavaDoc(param1));
328     params[param].setType(Types.SMALLINT);
329   }
330   
331   public void setString(int param, String JavaDoc str) throws SQLException JavaDoc {
332     realPS.setString(param, str);
333     param--;
334     params[param].setObjectValue(str);
335     params[param].setType(Types.VARCHAR);
336   }
337   
338   public void setTime(int param, java.sql.Time JavaDoc time) throws SQLException JavaDoc {
339     realPS.setTime(param, time);
340     param--;
341     params[param].setObjectValue(time);
342     params[param].setType(Types.TIME);
343   }
344   
345   public void setTime(int param, java.sql.Time JavaDoc time, java.util.Calendar JavaDoc calendar) throws SQLException JavaDoc {
346     realPS.setTime(param, time, calendar);
347     param--;
348     params[param].setObjectValue(time);
349     params[param].setType(Types.TIME);
350   }
351   
352   public void setTimestamp(int param, java.sql.Timestamp JavaDoc timestamp) throws SQLException JavaDoc {
353     realPS.setTimestamp(param, timestamp);
354     param--;
355     params[param].setObjectValue(timestamp);
356     params[param].setType(Types.TIMESTAMP);
357   }
358   
359   public void setTimestamp(int param, java.sql.Timestamp JavaDoc timestamp, java.util.Calendar JavaDoc calendar) throws SQLException JavaDoc {
360     realPS.setTimestamp(param, timestamp, calendar);
361     param--;
362     params[param].setObjectValue(timestamp);
363     params[param].setType(Types.TIMESTAMP);
364   }
365   
366   public void setURL(int param, java.net.URL JavaDoc url) throws SQLException JavaDoc {
367     realPS.setURL(param, url);
368     nocaching = true;
369   }
370   
371   public void setUnicodeStream(int param, java.io.InputStream JavaDoc inputStream, int param2) throws SQLException JavaDoc {
372     realPS.setUnicodeStream(param, inputStream, param2);
373     nocaching = true;
374   }
375   
376 }
Popular Tags