1/*
2 * Copyright (c) 1998, 2013, Oracle and/or its affiliates. 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.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package 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.writeSQL</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  //--------------------------JDBC 4.2 -----------------------------
437
438  /**
439   * Writes to the stream the data contained in the given object. The
440   * object will be converted to the specified targetSqlType
441   * before being sent to the stream.
442   *<p>
443   * When the {@code object} is {@code null}, this
444   * method writes an SQL {@code NULL} to the stream.
445   * <p>
446   * If the object has a custom mapping (is of a class implementing the
447   * interface {@code SQLData}),
448   * the JDBC driver should call the method {@code SQLData.writeSQL} to
449   * write it to the SQL data stream.
450   * If, on the other hand, the object is of a class implementing
451   * {@code Ref}, {@code Blob}, {@code Clob},  {@code NClob},
452   *  {@code Struct}, {@code java.net.URL},
453   * or {@code Array}, the driver should pass it to the database as a
454   * value of the corresponding SQL type.
455   *<P>
456   * The default implementation will throw {@code SQLFeatureNotSupportedException}
457   *
458   * @param x the object containing the input parameter value
459   * @param targetSqlType the SQL type to be sent to the database.
460   * @exception SQLException if a database access error occurs  or
461   *            if the Java Object specified by x is an InputStream
462   *            or Reader object and the value of the scale parameter is less
463   *            than zero
464   * @exception SQLFeatureNotSupportedException if
465   * the JDBC driver does not support this data type
466   * @see JDBCType
467   * @see SQLType
468   * @since 1.8
469   */
470  default void writeObject(Object x, SQLType targetSqlType) throws SQLException {
471        throw new SQLFeatureNotSupportedException();
472  }
473
474}
475
476