📄 preparedstatement.java
字号:
bOut.write('\\');
bOut.write('Z');
break;
default:
bOut.write(b);
}
}
bOut.write('\'');
setInternal(parameterIndex, bOut.toByteArray());
}
}
/**
* JDBC 2.0 When a very large UNICODE value is input to a LONGVARCHAR
* parameter, it may be more practical to send it via a java.io.Reader.
* JDBC will read the data from the stream as needed, until it reaches
* end-of-file. The JDBC driver will do any necessary conversion from
* UNICODE to the database char format.
*
* <P>
* <B>Note:</B> This stream object can either be a standard Java stream
* object or your own subclass that implements the standard interface.
* </p>
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param reader the java reader which contains the UNICODE data
* @param length the number of characters in the stream
*
* @throws SQLException if a database-access error occurs.
*/
public void setCharacterStream(int parameterIndex, java.io.Reader reader,
int length) throws SQLException {
try {
if (reader == null) {
setNull(parameterIndex, Types.LONGVARCHAR);
} else {
char[] c = null;
int len = 0;
boolean useLength = this.connection.useStreamLengthsInPrepStmts();
if (useLength && (length != -1)) {
c = new char[length];
int numCharsRead = readFully(reader, c, length); // blocks until all read
setString(parameterIndex, new String(c, 0, numCharsRead));
} else {
c = new char[4096];
StringBuffer buf = new StringBuffer();
while ((len = reader.read(c)) != -1) {
buf.append(c, 0, len);
}
setString(parameterIndex, buf.toString());
}
}
} catch (java.io.IOException ioEx) {
throw new SQLException(ioEx.toString(), SQLError.SQL_STATE_GENERAL_ERROR);
}
}
/**
* JDBC 2.0 Set a CLOB parameter.
*
* @param i the first parameter is 1, the second is 2, ...
* @param x an object representing a CLOB
*
* @throws SQLException if a database error occurs
*/
public void setClob(int i, Clob x) throws SQLException {
setString(i, x.getSubString(1L, (int) x.length()));
}
/**
* Set a parameter to a java.sql.Date value. The driver converts this to a
* SQL DATE value when it sends it to the database.
*
* @param parameterIndex the first parameter is 1...
* @param x the parameter value
*
* @exception SQLException if a database access error occurs
*/
public void setDate(int parameterIndex, java.sql.Date x)
throws SQLException {
if (x == null) {
setNull(parameterIndex, java.sql.Types.DATE);
} else {
// FIXME: Have instance version of this, problem as it's
// not thread-safe :(
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"''yyyy-MM-dd''");
setInternal(parameterIndex, dateFormatter.format(x));
}
}
/**
* Set a parameter to a java.sql.Date value. The driver converts this to a
* SQL DATE value when it sends it to the database.
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the parameter value
* @param cal the calendar to interpret the date with
*
* @throws SQLException if a database-access error occurs.
*/
public void setDate(int parameterIndex, java.sql.Date x, Calendar cal)
throws SQLException {
setDate(parameterIndex, x);
}
/**
* Set a parameter to a Java double value. The driver converts this to a
* SQL DOUBLE value when it sends it to the database
*
* @param parameterIndex the first parameter is 1...
* @param x the parameter value
*
* @throws SQLException if a database access error occurs
*/
public void setDouble(int parameterIndex, double x)
throws SQLException {
setInternal(parameterIndex, fixDecimalExponent(String.valueOf(x)));
}
/**
* Set a parameter to a Java float value. The driver converts this to a
* SQL FLOAT value when it sends it to the database.
*
* @param parameterIndex the first parameter is 1...
* @param x the parameter value
*
* @throws SQLException if a database access error occurs
*/
public void setFloat(int parameterIndex, float x) throws SQLException {
setInternal(parameterIndex, fixDecimalExponent(String.valueOf(x)));
}
/**
* Set a parameter to a Java int value. The driver converts this to a SQL
* INTEGER value when it sends it to the database.
*
* @param parameterIndex the first parameter is 1...
* @param x the parameter value
*
* @throws SQLException if a database access error occurs
*/
public void setInt(int parameterIndex, int x) throws SQLException {
setInternal(parameterIndex, String.valueOf(x));
}
/**
* Set a parameter to a Java long value. The driver converts this to a SQL
* BIGINT value when it sends it to the database.
*
* @param parameterIndex the first parameter is 1...
* @param x the parameter value
*
* @throws SQLException if a database access error occurs
*/
public void setLong(int parameterIndex, long x) throws SQLException {
setInternal(parameterIndex, String.valueOf(x));
}
/**
* The number, types and properties of a ResultSet's columns are provided
* by the getMetaData method.
*
* @return the description of a ResultSet's columns
*
* @throws SQLException if a database-access error occurs.
*/
public synchronized java.sql.ResultSetMetaData getMetaData() throws SQLException {
PreparedStatement mdStmt = null;
java.sql.ResultSet mdRs = null;
if (this.pstmtResultMetaData == null) {
try {
mdStmt = new PreparedStatement(this.connection,
this.originalSql, this.currentCatalog, this.parseInfo);
mdStmt.setMaxRows(0);
int paramCount = this.parameterValues.length;
for (int i = 1; i <= paramCount; i++) {
mdStmt.setString(i, "");
}
boolean hadResults = mdStmt.execute();
if (hadResults) {
mdRs = mdStmt.getResultSet();
this.pstmtResultMetaData = mdRs.getMetaData();
} else {
this.pstmtResultMetaData = new ResultSetMetaData(new Field[0]);
}
} finally {
SQLException sqlExRethrow = null;
if (mdRs != null) {
try {
mdRs.close();
} catch (SQLException sqlEx) {
sqlExRethrow = sqlEx;
}
mdRs = null;
}
if (mdStmt != null) {
try {
mdStmt.close();
} catch (SQLException sqlEx) {
sqlExRethrow = sqlEx;
}
mdStmt = null;
}
if (sqlExRethrow != null) {
throw sqlExRethrow;
}
}
}
return this.pstmtResultMetaData;
}
/**
* Set a parameter to SQL NULL
*
* <p>
* <B>Note:</B> You must specify the parameters SQL type (although MySQL
* ignores it)
* </p>
*
* @param parameterIndex the first parameter is 1, etc...
* @param sqlType the SQL type code defined in java.sql.Types
*
* @throws SQLException if a database access error occurs
*/
public void setNull(int parameterIndex, int sqlType)
throws SQLException {
setInternal(parameterIndex, "null");
isNull[parameterIndex - 1] = true;
}
//--------------------------JDBC 2.0-----------------------------
/**
* Set a parameter to SQL NULL.
*
* <P>
* <B>Note:</B> You must specify the parameter's SQL type.
* </p>
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param sqlType SQL type code defined by java.sql.Types
* @param arg argument parameters for null
*
* @throws SQLException if a database-access error occurs.
*/
public void setNull(int parameterIndex, int sqlType, String arg)
throws SQLException {
setNull(parameterIndex, sqlType);
}
/**
* Set the value of a parameter using an object; use the java.lang
* equivalent objects for integral values.
*
* <P>
* The given Java object will be converted to the targetSqlType before
* being sent to the database.
* </p>
*
* <P>
* note that this method may be used to pass database-specific abstract
* data types. This is done by using a Driver-specific Java type and
* using a targetSqlType of java.sql.Types.OTHER
* </p>
*
* @param parameterIndex the first parameter is 1...
* @param parameterObj the object containing the input parameter value
* @param targetSqlType The SQL type to be send to the database
* @param scale For java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types
* this is the number of digits after the decimal. For all other
* types this value will be ignored.
*
* @throws SQLException if a database access error occurs
* @throws java.sql.SQLException DOCUMENT ME!
*/
public void setObject(int parameterIndex, Object parameterObj,
int targetSqlType, int scale) throws SQLException {
if (parameterObj == null) {
setNull(parameterIndex, java.sql.Types.OTHER);
} else {
try {
switch (targetSqlType) {
case Types.BIT:
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
case Types.BIGINT:
case Types.REAL:
case Types.FLOAT:
case Types.DOUBLE:
case Types.DECIMAL:
case Types.NUMERIC:
Number parameterAsNum;
if (parameterObj instanceof Boolean) {
parameterAsNum = ((Boolean) parameterObj).booleanValue()
? new Integer(1) : new Integer(0);
} else if (parameterObj instanceof String) {
switch (targetSqlType) {
case Types.BIT:
parameterAsNum = (Boolean.getBoolean((String) parameterObj)
? new Integer("1") : new Integer("0"));
break;
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
parameterAsNum = Integer.valueOf((String) parameterObj);
break;
case Types.BIGINT:
parameterAsNum = Long.valueOf((String) parameterObj);
break;
case Types.REAL:
parameterAsNum = Float.valueOf((String) parameterObj);
break;
case Types.FLOAT:
case Types.DOUBLE:
parameterAsNum = Double.valueOf((String) parameterObj);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -