📄 jdbcpreparedstatement.java
字号:
*
* </div>
* <!-- end release-specific documentation -->
* @param i the first parameter is 1, the second is 2, ...
* @param x an SQL <code>REF</code> value
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
public void setRef(int i, Ref x) throws SQLException {
throw Util.notSupported;
}
/**
* <!-- start generic documentation -->
* Sets the designated parameter to the given <code>Blob</code> object.
* The driver converts this to an SQL <code>BLOB</code> value when it
* sends it to the database. <p>
* <!-- end generic documentation -->
*
* <!-- start release-specific documentation -->
* <div class="ReleaseSpecificDocumentation">
* <h3>HSQLDB-Specific Information:</h3> <p>
*
* Previous to 1.7.2, this feature was not supported. <p>
*
* Since 1.7.2, setBlob is supported. With 1.7.2, setting Blob objects is
* limited to those of length less than or equal to Integer.MAX_VALUE.
* In 1.7.2, setBlob(i,x) is roughly equivalent (null and length handling
* not shown) to:
*
* <pre class="JavaCodeExample">
* <b>setBinaryStream</b>(i, x.<b>getBinaryStream</b>(), (<span class="JavaKeyWord">int</span>) x.<b>length</b>());
* </pre></div>
* <!-- end release-specific documentation -->
*
* @param i the first parameter is 1, the second is 2, ...
* @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code>
* value
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
// boucherb@users 20030801 - method implemented
//#ifdef JAVA2
public void setBlob(int i, Blob x) throws SQLException {
if (x instanceof jdbcBlob) {
setParameter(i, ((jdbcBlob) x).data);
return;
} else if (x == null) {
setParameter(i, null);
return;
}
checkSetParameterIndex(i);
final long length = x.length();
if (length > Integer.MAX_VALUE) {
String msg = "Maximum Blob input octet length exceeded: "
+ length;
throw Util.sqlException(Trace.INPUTSTREAM_ERROR, msg);
}
HsqlByteArrayOutputStream out = null;
try {
out = new HsqlByteArrayOutputStream();
java.io.InputStream in = x.getBinaryStream();
int buffSize = 2048;
byte[] buff = new byte[buffSize];
for (int left = (int) length; left > 0; ) {
int read = in.read(buff, 0, left > buffSize ? buffSize
: left);
if (read == -1) {
break;
}
out.write(buff, 0, read);
left -= read;
}
setParameter(i, out.toByteArray());
} catch (IOException e) {
throw Util.sqlException(Trace.INPUTSTREAM_ERROR, e.getMessage());
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e1) {}
}
}
}
//#endif JAVA2
/**
* <!-- start generic documentation -->
* Sets the designated parameter to the given <code>Clob</code> object.
* The driver converts this to an SQL <code>CLOB</code> value when it
* sends it to the database. <p>
* <!-- end generic documentation -->
*
* <!-- start release-specific documentation -->
* <div class="ReleaseSpecificDocumentation">
* <h3>HSQLDB-Specific Information:</h3> <p>
*
* Previous to 1.7.2, this feature was not supported. <p>
*
* Since 1.7.2, setClob is supported. With 1.7.2, setting Blob objects is
* limited to those of length less than or equal to Integer.MAX_VALUE.
* In 1.7.2, setClob(i,x) is rougly equivalent (null and length handling
* not shown) to: <p>
*
* <pre class="JavaCodeExample">
* <b>setCharacterStream</b>(i, x.<b>getCharacterStream</b>(), (<span class="JavaKeyWord">int</span>) x.<b>length</b>());
* </pre></div>
* <!-- end release-specific documentation -->
* @param i the first parameter is 1, the second is 2, ...
* @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code>
* value
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
// boucherb@users 20030801 - method implemented
//#ifdef JAVA2
public void setClob(int i, Clob x) throws SQLException {
if (x instanceof jdbcClob) {
setParameter(i, ((jdbcClob) x).data);
return;
} else if (x == null) {
setParameter(i, null);
return;
}
checkSetParameterIndex(i);
final long length = x.length();
if (length > Integer.MAX_VALUE) {
String msg = "Max Clob input character length exceeded: "
+ length;
throw Util.sqlException(Trace.INPUTSTREAM_ERROR, msg);
}
java.io.Reader reader = x.getCharacterStream();
final StringBuffer sb = new StringBuffer();
final int size = 2048;
final char[] buff = new char[size];
try {
for (int left = (int) length; left > 0; ) {
final int read = reader.read(buff, 0, left > size ? size
: left);
if (read == -1) {
break;
}
sb.append(buff, 0, read);
left -= read;
}
} catch (IOException e) {
throw Util.sqlException(Trace.TRANSFER_CORRUPTED, e.toString());
}
setParameter(i, sb.toString());
}
//#endif JAVA2
/**
* <!-- start generic documentation -->
* Sets the designated parameter to the given <code>Array</code> object.
* The driver converts this to an SQL <code>ARRAY</code> value when it
* sends it to the database. <p>
* <!-- end generic documentation -->
*
* <!-- start release-specific documentation -->
* <div class="ReleaseSpecificDocumentation">
* <h3>HSQLDB-Specific Information:</h3> <p>
*
* HSQLDB 1.7.2 does not support the SQL ARRAY type. Calling this method
* throws an exception.
*
* </div>
* <!-- end release-specific documentation -->
* @param i the first parameter is 1, the second is 2, ...
* @param x an <code>Array</code> object that maps an SQL <code>ARRAY</code>
* value
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
public void setArray(int i, Array x) throws SQLException {
throw Util.notSupported;
}
/**
* <!-- start generic documentation -->
* Retrieves a <code>ResultSetMetaData</code> object that contains
* information about the columns of the <code>ResultSet</code> object
* that will be returned when this <code>PreparedStatement</code> object
* is executed.
* <P>
* Because a <code>PreparedStatement</code> object is precompiled, it is
* possible to know about the <code>ResultSet</code> object that it will
* return without having to execute it. Consequently, it is possible
* to invoke the method <code>getMetaData</code> on a
* <code>PreparedStatement</code> object rather than waiting to execute
* it and then invoking the <code>ResultSet.getMetaData</code> method
* on the <code>ResultSet</code> object that is returned.
* <P>
* <B>NOTE:</B> Using this method may be expensive for some drivers due
* to the lack of underlying DBMS support. <p>
* <!-- end generic documentation -->
*
* <!-- start release-specific documentation -->
* <div class="ReleaseSpecificDocumentation">
* <h3>HSQLDB-Specific Information:</h3> <p>
*
* Since 1.7.2, this feature is supported. If the statement
* generates an update count, then null is returned.
*
* </div>
* <!-- end release-specific documentation -->
* @return the description of a <code>ResultSet</code> object's columns or
* <code>null</code> if the driver cannot return a
* <code>ResultSetMetaData</code> object
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
// boucherb@users 20030801 - method implemented
public ResultSetMetaData getMetaData() throws SQLException {
checkClosed();
if (isRowCount) {
return null;
}
if (rsmd == null) {
rsmd = new jdbcResultSetMetaData(rsmdDescriptor,
connection.connProperties);
}
return rsmd;
}
/**
* <!-- start generic documentation -->
* Sets the designated parameter to the given <code>java.sql.Date</code>
* value, using the given <code>Calendar</code> object. The driver uses
* the <code>Calendar</code> object to construct an SQL <code>DATE</code>
* value,which the driver then sends to the database. With a
* a <code>Calendar</code> object, the driver can calculate the date
* taking into account a custom timezone. If no
* <code>Calendar</code> object is specified, the driver uses the default
* timezone, which is that of the virtual machine running the
* application. <p>
* <!-- end generic documentation -->
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the parameter value
* @param cal the <code>Calendar</code> object the driver will use
* to construct the date
* @exception SQLException if a database access error occurs
* @since JDK 1.2 (JDK 1.1.x developers: read the new overview for
* jdbcPreparedStatement)
*/
// fredt@users 20020414 - patch 517028 by peterhudson@users - method defined
// changes by fredt - moved conversion to HsqlDateTime
public void setDate(int parameterIndex, Date x,
Calendar cal) throws SQLException {
String s;
try {
s = HsqlDateTime.getDateString(x, cal);
} catch (Exception e) {
throw Util.sqlException(Trace.INVALID_ESCAPE, e.getMessage());
}
setParameter(parameterIndex, s);
}
/**
* <!-- start generic documentation -->
* Sets the designated parameter to the given <code>java.sql.Time</code>
* value, using the given <code>Calendar</code> object. The driver uses
* the <code>Calendar</code> object to construct an SQL <code>TIME</code>
* value, which the driver then sends to the database. With a
* a <code>Calendar</code> object, the driver can calculate the time
* taking into account a custom timezone. If no
* <code>Calendar</code> object is specified, the driver uses the default
* timezone, which is that of the virtual machine running the
* application. <p>
* <!-- end generic documentation -->
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the parameter value
* @param cal the <code>Calendar</code> object the driver will use
* to construct the time
* @exception SQLExcepti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -