1 /*
2 * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package java.sql;
27
28 /**
29 * The output stream for writing the attributes of a user-defined
30 * type back to the database. This interface, used
31 * only for custom mapping, is used by the driver, and its
32 * methods are never directly invoked by a programmer.
33 * <p>When an object of a class implementing the interface
34 * <code>SQLData</code> is passed as an argument to an SQL statement, the
35 * JDBC driver calls the method <code>SQLData.getSQLType</code> to
36 * determine the kind of SQL
37 * datum being passed to the database.
38 * The driver then creates an instance of <code>SQLOutput</code> and
39 * passes it to the method <code>SQLData.writeSQL</code>.
40 * The method <code>writeSQL</code> in turn calls the
41 * appropriate <code>SQLOutput</code> <i>writer</i> methods
42 * <code>writeBoolean</code>, <code>writeCharacterStream</code>, and so on)
43 * to write data from the <code>SQLData</code> object to
44 * the <code>SQLOutput</code> output stream as the
45 * representation of an SQL user-defined type.
46 * @since 1.2
47 */
48
49 public interface SQLOutput {
50
51 //================================================================
52 // Methods for writing attributes to the stream of SQL data.
53 // These methods correspond to the column-accessor methods of
54 // java.sql.ResultSet.
55 //================================================================
56
57 /**
58 * Writes the next attribute to the stream as a <code>String</code>
59 * in the Java programming language.
60 *
61 * @param x the value to pass to the database
62 * @exception SQLException if a database access error occurs
63 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
64 * this method
65 * @since 1.2
66 */
67 void writeString(String x) throws SQLException;
68
69 /**
70 * Writes the next attribute to the stream as a Java boolean.
71 * Writes the next attribute to the stream as a <code>String</code>
72 * in the Java programming language.
73 *
74 * @param x the value to pass to the database
75 * @exception SQLException if a database access error occurs
76 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
77 * this method
78 * @since 1.2
79 */
80 void writeBoolean(boolean x) throws SQLException;
81
82 /**
83 * Writes the next attribute to the stream as a Java byte.
84 * Writes the next attribute to the stream as a <code>String</code>
85 * in the Java programming language.
86 *
87 * @param x the value to pass to the database
88 * @exception SQLException if a database access error occurs
89 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
90 * this method
91 * @since 1.2
92 */
93 void writeByte(byte x) throws SQLException;
94
95 /**
96 * Writes the next attribute to the stream as a Java short.
97 * Writes the next attribute to the stream as a <code>String</code>
98 * in the Java programming language.
99 *
100 * @param x the value to pass to the database
101 * @exception SQLException if a database access error occurs
102 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
103 * this method
104 * @since 1.2
105 */
106 void writeShort(short x) throws SQLException;
107
108 /**
109 * Writes the next attribute to the stream as a Java int.
110 * Writes the next attribute to the stream as a <code>String</code>
111 * in the Java programming language.
112 *
113 * @param x the value to pass to the database
114 * @exception SQLException if a database access error occurs
115 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
116 * this method
117 * @since 1.2
118 */
119 void writeInt(int x) throws SQLException;
120
121 /**
122 * Writes the next attribute to the stream as a Java long.
123 * Writes the next attribute to the stream as a <code>String</code>
124 * in the Java programming language.
125 *
126 * @param x the value to pass to the database
127 * @exception SQLException if a database access error occurs
128 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
129 * this method
130 * @since 1.2
131 */
132 void writeLong(long x) throws SQLException;
133
134 /**
135 * Writes the next attribute to the stream as a Java float.
136 * Writes the next attribute to the stream as a <code>String</code>
137 * in the Java programming language.
138 *
139 * @param x the value to pass to the database
140 * @exception SQLException if a database access error occurs
141 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
142 * this method
143 * @since 1.2
144 */
145 void writeFloat(float x) throws SQLException;
146
147 /**
148 * Writes the next attribute to the stream as a Java double.
149 * Writes the next attribute to the stream as a <code>String</code>
150 * in the Java programming language.
151 *
152 * @param x the value to pass to the database
153 * @exception SQLException if a database access error occurs
154 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
155 * this method
156 * @since 1.2
157 */
158 void writeDouble(double x) throws SQLException;
159
160 /**
161 * Writes the next attribute to the stream as a java.math.BigDecimal object.
162 * Writes the next attribute to the stream as a <code>String</code>
163 * in the Java programming language.
164 *
165 * @param x the value to pass to the database
166 * @exception SQLException if a database access error occurs
167 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
168 * this method
169 * @since 1.2
170 */
171 void writeBigDecimal(java.math.BigDecimal x) throws SQLException;
172
173 /**
174 * Writes the next attribute to the stream as an array of bytes.
175 * Writes the next attribute to the stream as a <code>String</code>
176 * in the Java programming language.
177 *
178 * @param x the value to pass to the database
179 * @exception SQLException if a database access error occurs
180 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
181 * this method
182 * @since 1.2
183 */
184 void writeBytes(byte[] x) throws SQLException;
185
186 /**
187 * Writes the next attribute to the stream as a java.sql.Date object.
188 * Writes the next attribute to the stream as a <code>java.sql.Date</code> object
189 * in the Java programming language.
190 *
191 * @param x the value to pass to the database
192 * @exception SQLException if a database access error occurs
193 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
194 * this method
195 * @since 1.2
196 */
197 void writeDate(java.sql.Date x) throws SQLException;
198
199 /**
200 * Writes the next attribute to the stream as a java.sql.Time object.
201 * Writes the next attribute to the stream as a <code>java.sql.Date</code> object
202 * in the Java programming language.
203 *
204 * @param x the value to pass to the database
205 * @exception SQLException if a database access error occurs
206 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
207 * this method
208 * @since 1.2
209 */
210 void writeTime(java.sql.Time x) throws SQLException;
211
212 /**
213 * Writes the next attribute to the stream as a java.sql.Timestamp object.
214 * Writes the next attribute to the stream as a <code>java.sql.Date</code> object
215 * in the Java programming language.
216 *
217 * @param x the value to pass to the database
218 * @exception SQLException if a database access error occurs
219 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
220 * this method
221 * @since 1.2
222 */
223 void writeTimestamp(java.sql.Timestamp x) throws SQLException;
224
225 /**
226 * Writes the next attribute to the stream as a stream of Unicode characters.
227 *
228 * @param x the value to pass to the database
229 * @exception SQLException if a database access error occurs
230 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
231 * this method
232 * @since 1.2
233 */
234 void writeCharacterStream(java.io.Reader x) throws SQLException;
235
236 /**
237 * Writes the next attribute to the stream as a stream of ASCII characters.
238 *
239 * @param x the value to pass to the database
240 * @exception SQLException if a database access error occurs
241 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
242 * this method
243 * @since 1.2
244 */
245 void writeAsciiStream(java.io.InputStream x) throws SQLException;
246
247 /**
248 * Writes the next attribute to the stream as a stream of uninterpreted
249 * bytes.
250 *
251 * @param x the value to pass to the database
252 * @exception SQLException if a database access error occurs
253 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
254 * this method
255 * @since 1.2
256 */
257 void writeBinaryStream(java.io.InputStream x) throws SQLException;
258
259 //================================================================
260 // Methods for writing items of SQL user-defined types to the stream.
261 // These methods pass objects to the database as values of SQL
262 // Structured Types, Distinct Types, Constructed Types, and Locator
263 // Types. They decompose the Java object(s) and write leaf data
264 // items using the methods above.
265 //================================================================
266
267 /**
268 * Writes to the stream the data contained in the given
269 * <code>SQLData</code> object.
270 * When the <code>SQLData</code> object is <code>null</code>, this
271 * method writes an SQL <code>NULL</code> to the stream.
272 * Otherwise, it calls the <code>SQLData.writeSQL</code>
273 * method of the given object, which
274 * writes the object's attributes to the stream.
275 * The implementation of the method <code>SQLData.writeSQ</code>
276 * calls the appropriate <code>SQLOutput</code> writer method(s)
277 * for writing each of the object's attributes in order.
278 * The attributes must be read from an <code>SQLInput</code>
279 * input stream and written to an <code>SQLOutput</code>
280 * output stream in the same order in which they were
281 * listed in the SQL definition of the user-defined type.
282 *
283 * @param x the object representing data of an SQL structured or
284 * distinct type
285 * @exception SQLException if a database access error occurs
286 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
287 * this method
288 * @since 1.2
289 */
290 void writeObject(SQLData x) throws SQLException;
291
292 /**
293 * Writes an SQL <code>REF</code> value to the stream.
294 *
295 * @param x a <code>Ref</code> object representing data of an SQL
296 * <code>REF</code> value
297 * @exception SQLException if a database access error occurs
298 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
299 * this method
300 * @since 1.2
301 */
302 void writeRef(Ref x) throws SQLException;
303
304 /**
305 * Writes an SQL <code>BLOB</code> value to the stream.
306 *
307 * @param x a <code>Blob</code> object representing data of an SQL
308 * <code>BLOB</code> value
309 *
310 * @exception SQLException if a database access error occurs
311 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
312 * this method
313 * @since 1.2
314 */
315 void writeBlob(Blob x) throws SQLException;
316
317 /**
318 * Writes an SQL <code>CLOB</code> value to the stream.
319 *
320 * @param x a <code>Clob</code> object representing data of an SQL
321 * <code>CLOB</code> value
322 *
323 * @exception SQLException if a database access error occurs
324 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
325 * this method
326 * @since 1.2
327 */
328 void writeClob(Clob x) throws SQLException;
329
330 /**
331 * Writes an SQL structured type value to the stream.
332 *
333 * @param x a <code>Struct</code> object representing data of an SQL
334 * structured type
335 *
336 * @exception SQLException if a database access error occurs
337 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
338 * this method
339 * @since 1.2
340 */
341 void writeStruct(Struct x) throws SQLException;
342
343 /**
344 * Writes an SQL <code>ARRAY</code> value to the stream.
345 *
346 * @param x an <code>Array</code> object representing data of an SQL
347 * <code>ARRAY</code> type
348 *
349 * @exception SQLException if a database access error occurs
350 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
351 * this method
352 * @since 1.2
353 */
354 void writeArray(Array x) throws SQLException;
355
356 //--------------------------- JDBC 3.0 ------------------------
357
358 /**
359 * Writes a SQL <code>DATALINK</code> value to the stream.
360 *
361 * @param x a <code>java.net.URL</code> object representing the data
362 * of SQL DATALINK type
363 *
364 * @exception SQLException if a database access error occurs
365 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
366 * this method
367 * @since 1.4
368 */
369 void writeURL(java.net.URL x) throws SQLException;
370
371 //--------------------------- JDBC 4.0 ------------------------
372
373 /**
374 * Writes the next attribute to the stream as a <code>String</code>
375 * in the Java programming language. The driver converts this to a
376 * SQL <code>NCHAR</code> or
377 * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
378 * (depending on the argument's
379 * size relative to the driver's limits on <code>NVARCHAR</code> values)
380 * when it sends it to the stream.
381 *
382 * @param x the value to pass to the database
383 * @exception SQLException if a database access error occurs
384 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
385 * this method
386 * @since 1.6
387 */
388 void writeNString(String x) throws SQLException;
389
390 /**
391 * Writes an SQL <code>NCLOB</code> value to the stream.
392 *
393 * @param x a <code>NClob</code> object representing data of an SQL
394 * <code>NCLOB</code> value
395 *
396 * @exception SQLException if a database access error occurs
397 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
398 * this method
399 * @since 1.6
400 */
401 void writeNClob(NClob x) throws SQLException;
402
403
404 /**
405 * Writes an SQL <code>ROWID</code> value to the stream.
406 *
407 * @param x a <code>RowId</code> object representing data of an SQL
408 * <code>ROWID</code> value
409 *
410 * @exception SQLException if a database access error occurs
411 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
412 * this method
413 * @since 1.6
414 */
415 void writeRowId(RowId x) throws SQLException;
416
417
418 /**
419 * Writes an SQL <code>XML</code> value to the stream.
420 *
421 * @param x a <code>SQLXML</code> object representing data of an SQL
422 * <code>XML</code> value
423 *
424 * @throws SQLException if a database access error occurs,
425 * the <code>java.xml.transform.Result</code>,
426 * <code>Writer</code> or <code>OutputStream</code> has not been closed for the <code>SQLXML</code> object or
427 * if there is an error processing the XML value. The <code>getCause</code> method
428 * of the exception may provide a more detailed exception, for example, if the
429 * stream does not contain valid XML.
430 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
431 * this method
432 * @since 1.6
433 */
434 void writeSQLXML(SQLXML x) throws SQLException;
435
436
437 }