|
Posted on 2013-01-06 11:09 疯狂 阅读(5233) 评论(0) 编辑 收藏 所属分类: database 、 spring 、 读代码
spring在执行sql语句时,会根据用户提供的类型参数来进行sql参数的绑定,例如:
 public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException {

return update(sql, newArgTypePreparedStatementSetter(args, argTypes));

}

 其中可用的type类型如下:
 public class Types {

public final static int BIT = -7;


public final static int TINYINT = -6;


public final static int SMALLINT = 5;


public final static int INTEGER = 4;


public final static int BIGINT = -5;


public final static int FLOAT = 6;


public final static int REAL = 7;


public final static int DOUBLE = 8;


public final static int NUMERIC = 2;


public final static int DECIMAL = 3;


public final static int CHAR = 1;


public final static int VARCHAR = 12;


public final static int LONGVARCHAR = -1;


public final static int DATE = 91;


public final static int TIME = 92;

public final static int TIMESTAMP = 93;


public final static int BINARY = -2;


public final static int VARBINARY = -3;


public final static int LONGVARBINARY = -4;


public final static int NULL = 0;


public final static int OTHER = 1111;


public final static int JAVA_OBJECT = 2000;


public final static int DISTINCT = 2001;


public final static int STRUCT = 2002;


public final static int ARRAY = 2003;


public final static int BLOB = 2004;


public final static int CLOB = 2005;


public final static int REF = 2006;


public final static int DATALINK = 70;


public final static int BOOLEAN = 16;


// ------------------------- JDBC 4.0 -----------------------------------


public final static int ROWID = -8;


public static final int NCHAR = -15;


public static final int NVARCHAR = -9;


public static final int LONGNVARCHAR = -16;


public static final int NCLOB = 2011;


public static final int SQLXML = 2009;


}


其中argTypes里面设定了args参数数组里面每个对象的sql类型。最终spring设置参数的方法如下:
private static void setValue(PreparedStatement ps, int paramIndex, int sqlType, String typeName,

 Integer scale, Object inValue) throws SQLException {


 if (inValue instanceof SqlTypeValue) {

((SqlTypeValue) inValue).setTypeValue(ps, paramIndex, sqlType, typeName);

}

 else if (inValue instanceof SqlValue) {

((SqlValue) inValue).setValue(ps, paramIndex);

}

else if (sqlType == Types.VARCHAR || sqlType == Types.LONGVARCHAR ||

 (sqlType == Types.CLOB && isStringValue(inValue.getClass()))) {

ps.setString(paramIndex, inValue.toString());

}

 else if (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC) {

 if (inValue instanceof BigDecimal) {

ps.setBigDecimal(paramIndex, (BigDecimal) inValue);

}

 else if (scale != null) {

ps.setObject(paramIndex, inValue, sqlType, scale);

}

 else {

ps.setObject(paramIndex, inValue, sqlType);

}

}

 else if (sqlType == Types.DATE) {

 if (inValue instanceof java.util.Date) {

 if (inValue instanceof java.sql.Date) {

ps.setDate(paramIndex, (java.sql.Date) inValue);

}

 else {

ps.setDate(paramIndex, new java.sql.Date(((java.util.Date) inValue).getTime()));

}

}

 else if (inValue instanceof Calendar) {

Calendar cal = (Calendar) inValue;

ps.setDate(paramIndex, new java.sql.Date(cal.getTime().getTime()), cal);

}

 else {

ps.setObject(paramIndex, inValue, Types.DATE);

}

}

 else if (sqlType == Types.TIME) {

 if (inValue instanceof java.util.Date) {

 if (inValue instanceof java.sql.Time) {

ps.setTime(paramIndex, (java.sql.Time) inValue);

}

 else {

ps.setTime(paramIndex, new java.sql.Time(((java.util.Date) inValue).getTime()));

}

}

 else if (inValue instanceof Calendar) {

Calendar cal = (Calendar) inValue;

ps.setTime(paramIndex, new java.sql.Time(cal.getTime().getTime()), cal);

}

 else {

ps.setObject(paramIndex, inValue, Types.TIME);

}

}

 else if (sqlType == Types.TIMESTAMP) {

 if (inValue instanceof java.util.Date) {

 if (inValue instanceof java.sql.Timestamp) {

ps.setTimestamp(paramIndex, (java.sql.Timestamp) inValue);

}

 else {

ps.setTimestamp(paramIndex, new java.sql.Timestamp(((java.util.Date) inValue).getTime()));

}

}

 else if (inValue instanceof Calendar) {

Calendar cal = (Calendar) inValue;

ps.setTimestamp(paramIndex, new java.sql.Timestamp(cal.getTime().getTime()), cal);

}

 else {

ps.setObject(paramIndex, inValue, Types.TIMESTAMP);

}

}

 else if (sqlType == SqlTypeValue.TYPE_UNKNOWN) {

 if (isStringValue(inValue.getClass())) {

ps.setString(paramIndex, inValue.toString());

}

 else if (isDateValue(inValue.getClass())) {

ps.setTimestamp(paramIndex, new java.sql.Timestamp(((java.util.Date) inValue).getTime()));

}

 else if (inValue instanceof Calendar) {

Calendar cal = (Calendar) inValue;

ps.setTimestamp(paramIndex, new java.sql.Timestamp(cal.getTime().getTime()), cal);

}

 else {

// Fall back to generic setObject call without SQL type specified.

ps.setObject(paramIndex, inValue); }


}

 else {

// Fall back to generic setObject call with SQL type specified.

ps.setObject(paramIndex, inValue, sqlType);

}



当我们没有给spring的相应方法传递参数类型的时候,例如调用:
 public int update(String sql, Object args) throws DataAccessException {

return update(sql, newArgPreparedStatementSetter(args));
}

最终表现为SqlTypeValue.TYPE_UNKNOWN,对于非String,Date,Calendar 类型的对象对,spring将通过ps.setObject(paramIndex, inValue)进行参数设置,也就是交给我们的jdbc驱动(eg:jdbc6.jar)来进行设置,驱动程序会根据传递的对象来进行类型的转换并进行参数设置:
其中java类型到sql类型的转换如下:
oracle.jdbc.driver.OraclePreparedStatement

int sqlTypeForObject(Object paramObject)

 {

if (paramObject == null)

 {

return 0;

}


if (!(paramObject instanceof Datum))

 {

if ((paramObject instanceof String))

 {

return this.fixedString ? 999 : 12;

}

 if ((paramObject instanceof BigDecimal)) {

return 2;

}

 if ((paramObject instanceof Boolean)) {

return -7;

}

 if ((paramObject instanceof Integer)) {

return 4;

}

 if ((paramObject instanceof Long)) {

return -5;

}

 if ((paramObject instanceof Float)) {

return 7;

}

 if ((paramObject instanceof Double)) {

return 8;

}

 if ((paramObject instanceof byte[])) {

return -3;

}


 if ((paramObject instanceof Short)) {

return 5;

}

 if ((paramObject instanceof Byte)) {

return -6;

}

 if ((paramObject instanceof Date)) {

return 91;

}

 if ((paramObject instanceof Time)) {

return 92;

}

 if ((paramObject instanceof Timestamp)) {

return 93;

}

 if ((paramObject instanceof SQLData)) {

return 2002;

}

if ((paramObject instanceof ObjectData))

return 2002;

}


其中驱动里面oracle的类型定义如下,和jdk里面Types类定义的基本对应。
public abstract class OracleTypes

  {

public static final int BIT = -7;

public static final int TINYINT = -6;

public static final int SMALLINT = 5;

public static final int INTEGER = 4;

public static final int BIGINT = -5;

public static final int FLOAT = 6;

public static final int REAL = 7;

public static final int DOUBLE = 8;

public static final int NUMERIC = 2;

public static final int DECIMAL = 3;

public static final int CHAR = 1;

public static final int VARCHAR = 12;

public static final int LONGVARCHAR = -1;

public static final int DATE = 91;

public static final int TIME = 92;

public static final int TIMESTAMP = 93;


 /** *//** @deprecated */

public static final int TIMESTAMPNS = -100;

public static final int TIMESTAMPTZ = -101;

public static final int TIMESTAMPLTZ = -102;

public static final int INTERVALYM = -103;

public static final int INTERVALDS = -104;

public static final int BINARY = -2;

public static final int VARBINARY = -3;

public static final int LONGVARBINARY = -4;

public static final int ROWID = -8;

public static final int CURSOR = -10;

public static final int BLOB = 2004;

public static final int CLOB = 2005;

public static final int BFILE = -13;

public static final int STRUCT = 2002;

public static final int ARRAY = 2003;

public static final int REF = 2006;

public static final int NCHAR = -15;

public static final int NCLOB = 2011;

public static final int NVARCHAR = -9;

public static final int LONGNVARCHAR = -16;

public static final int SQLXML = 2009;

public static final int OPAQUE = 2007;

public static final int JAVA_STRUCT = 2008;

public static final int JAVA_OBJECT = 2000;

public static final int PLSQL_INDEX_TABLE = -14;

public static final int BINARY_FLOAT = 100;

public static final int BINARY_DOUBLE = 101;

public static final int NULL = 0;

public static final int NUMBER = 2;

public static final int RAW = -2;

public static final int OTHER = 1111;

public static final int FIXED_CHAR = 999;

public static final int DATALINK = 70;

public static final int BOOLEAN = 16;

private static final String _Copyright_2007_Oracle_All_Rights_Reserved_ = null;

public static final String BUILD_DATE = "Fri_Jul_31_19:30:28_PDT_2009";

public static final boolean TRACE = false;

public static final boolean PRIVATE_TRACE = false;

}


最终驱动程序将根据转换的类型进行参数绑定,具体如下:
void setObjectCritical(int paramInt1, Object paramObject, int paramInt2, int paramInt3)

throws SQLException

 {

SQLException localSQLException;

switch (paramInt2)

 {

case 1:

 if ((paramObject instanceof CHAR)) {

setCHARInternal(paramInt1, (CHAR)paramObject);

 } else if ((paramObject instanceof String)) {

setStringInternal(paramInt1, (String)paramObject);

 } else if ((paramObject instanceof Boolean)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Boolean)paramObject).booleanValue() ? 1 : 0).toString());

}

 else if ((paramObject instanceof Integer)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Integer)paramObject).intValue()).toString());

 } else if ((paramObject instanceof Long)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Long)paramObject).longValue()).toString());

 } else if ((paramObject instanceof Float)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Float)paramObject).floatValue()).toString());

 } else if ((paramObject instanceof Double)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Double)paramObject).doubleValue()).toString());

 } else if ((paramObject instanceof BigDecimal)) {

setStringInternal(paramInt1, ((BigDecimal)paramObject).toString());

 } else if ((paramObject instanceof Date)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Date)paramObject).toString()).toString());

 } else if ((paramObject instanceof Time)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Time)paramObject).toString()).toString());

 } else if ((paramObject instanceof Timestamp)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Timestamp)paramObject).toString()).toString());

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 12:

 if ((paramObject instanceof String)) {

setStringInternal(paramInt1, (String)paramObject);

 } else if ((paramObject instanceof Boolean)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Boolean)paramObject).booleanValue() ? 1 : 0).toString());

}

 else if ((paramObject instanceof Integer)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Integer)paramObject).intValue()).toString());

 } else if ((paramObject instanceof Long)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Long)paramObject).longValue()).toString());

 } else if ((paramObject instanceof Float)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Float)paramObject).floatValue()).toString());

 } else if ((paramObject instanceof Double)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Double)paramObject).doubleValue()).toString());

 } else if ((paramObject instanceof BigDecimal)) {

setStringInternal(paramInt1, ((BigDecimal)paramObject).toString());

 } else if ((paramObject instanceof Date)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Date)paramObject).toString()).toString());

 } else if ((paramObject instanceof Time)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Time)paramObject).toString()).toString());

 } else if ((paramObject instanceof Timestamp)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Timestamp)paramObject).toString()).toString());

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 999:

setFixedCHARInternal(paramInt1, (String)paramObject);


break;

case -1:

 if ((paramObject instanceof String)) {

setStringInternal(paramInt1, (String)paramObject);

 } else if ((paramObject instanceof Boolean)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Boolean)paramObject).booleanValue() ? 1 : 0).toString());

}

 else if ((paramObject instanceof Integer)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Integer)paramObject).intValue()).toString());

}

 else if ((paramObject instanceof Long)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Long)paramObject).longValue()).toString());

}

 else if ((paramObject instanceof Float)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Float)paramObject).floatValue()).toString());

}

 else if ((paramObject instanceof Double)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Double)paramObject).doubleValue()).toString());

}

 else if ((paramObject instanceof BigDecimal)) {

setStringInternal(paramInt1, ((BigDecimal)paramObject).toString());

 } else if ((paramObject instanceof Date)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Date)paramObject).toString()).toString());

 } else if ((paramObject instanceof Time)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Time)paramObject).toString()).toString());

 } else if ((paramObject instanceof Timestamp)) {

setStringInternal(paramInt1, new StringBuilder().append("").append(((Timestamp)paramObject).toString()).toString());

}

else

 {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 2:

 if ((paramObject instanceof NUMBER)) {

setNUMBERInternal(paramInt1, (NUMBER)paramObject);

 } else if ((paramObject instanceof Integer)) {

setIntInternal(paramInt1, ((Integer)paramObject).intValue());

 } else if ((paramObject instanceof Long)) {

setLongInternal(paramInt1, ((Long)paramObject).longValue());

 } else if ((paramObject instanceof Float)) {

setFloatInternal(paramInt1, ((Float)paramObject).floatValue());

 } else if ((paramObject instanceof Double)) {

setDoubleInternal(paramInt1, ((Double)paramObject).doubleValue());

 } else if ((paramObject instanceof BigDecimal)) {

setBigDecimalInternal(paramInt1, (BigDecimal)paramObject);

 } else if ((paramObject instanceof String)) {

setNUMBERInternal(paramInt1, new NUMBER((String)paramObject, paramInt3));

 } else if ((paramObject instanceof Boolean)) {

setIntInternal(paramInt1, ((Boolean)paramObject).booleanValue() ? 1 : 0);

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 3:

 if ((paramObject instanceof BigDecimal)) {

setBigDecimalInternal(paramInt1, (BigDecimal)paramObject);

 } else if ((paramObject instanceof Number)) {

setBigDecimalInternal(paramInt1, new BigDecimal(((Number)paramObject).doubleValue()));

}

 else if ((paramObject instanceof NUMBER)) {

setBigDecimalInternal(paramInt1, ((NUMBER)paramObject).bigDecimalValue());

 } else if ((paramObject instanceof String)) {

setBigDecimalInternal(paramInt1, new BigDecimal((String)paramObject));

 } else if ((paramObject instanceof Boolean)) {

setBigDecimalInternal(paramInt1, new BigDecimal(((Boolean)paramObject).booleanValue() ? 1.0D : 0.0D));

}

else

 {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case -7:

 if ((paramObject instanceof Boolean)) {

setByteInternal(paramInt1, (byte)(((Boolean)paramObject).booleanValue() ? 1 : 0));

}

 else if ((paramObject instanceof String)) {

setByteInternal(paramInt1, (byte)(("true".equalsIgnoreCase((String)paramObject)) || ("1".equals(paramObject)) ? 1 : 0));

}

 else if ((paramObject instanceof Number)) {

setIntInternal(paramInt1, ((Number)paramObject).byteValue() != 0 ? 1 : 0);

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case -6:

 if ((paramObject instanceof Number)) {

setByteInternal(paramInt1, ((Number)paramObject).byteValue());

 } else if ((paramObject instanceof String)) {

setByteInternal(paramInt1, Byte.parseByte((String)paramObject));

 } else if ((paramObject instanceof Boolean)) {

setByteInternal(paramInt1, (byte)(((Boolean)paramObject).booleanValue() ? 1 : 0));

}

else

 {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 5:

 if ((paramObject instanceof Number)) {

setShortInternal(paramInt1, ((Number)paramObject).shortValue());

 } else if ((paramObject instanceof String)) {

setShortInternal(paramInt1, Short.parseShort((String)paramObject));

 } else if ((paramObject instanceof Boolean)) {

setShortInternal(paramInt1, (short)(((Boolean)paramObject).booleanValue() ? 1 : 0));

}

else

 {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 4:

 if ((paramObject instanceof Number)) {

setIntInternal(paramInt1, ((Number)paramObject).intValue());

 } else if ((paramObject instanceof String)) {

setIntInternal(paramInt1, Integer.parseInt((String)paramObject));

 } else if ((paramObject instanceof Boolean)) {

setIntInternal(paramInt1, ((Boolean)paramObject).booleanValue() ? 1 : 0);

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case -5:

 if ((paramObject instanceof Number)) {

setLongInternal(paramInt1, ((Number)paramObject).longValue());

 } else if ((paramObject instanceof String)) {

setLongInternal(paramInt1, Long.parseLong((String)paramObject));

 } else if ((paramObject instanceof Boolean)) {

setLongInternal(paramInt1, ((Boolean)paramObject).booleanValue() ? 1L : 0L);

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 7:

 if ((paramObject instanceof Number)) {

setFloatInternal(paramInt1, ((Number)paramObject).floatValue());

 } else if ((paramObject instanceof String)) {

setFloatInternal(paramInt1, Float.valueOf((String)paramObject).floatValue());

 } else if ((paramObject instanceof Boolean)) {

setFloatInternal(paramInt1, ((Boolean)paramObject).booleanValue() ? 1.0F : 0.0F);

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 6:

case 8:

 if ((paramObject instanceof Number)) {

setDoubleInternal(paramInt1, ((Number)paramObject).doubleValue());

 } else if ((paramObject instanceof String)) {

setDoubleInternal(paramInt1, Double.valueOf((String)paramObject).doubleValue());

}

 else if ((paramObject instanceof Boolean)) {

setDoubleInternal(paramInt1, ((Boolean)paramObject).booleanValue() ? 1.0D : 0.0D);

}

else

 {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case -2:

if ((paramObject instanceof RAW))

setRAWInternal(paramInt1, (RAW)paramObject);

 else {

setBytesInternal(paramInt1, (byte[])(byte[])paramObject);

}

break;

case -3:

setBytesInternal(paramInt1, (byte[])(byte[])paramObject);


break;

case -4:

setBytesInternal(paramInt1, (byte[])(byte[])paramObject);


break;

case 91:

 if ((paramObject instanceof DATE)) {

setDATEInternal(paramInt1, (DATE)paramObject);

 } else if ((paramObject instanceof Date)) {

setDateInternal(paramInt1, (Date)paramObject);

 } else if ((paramObject instanceof Timestamp)) {

setDATEInternal(paramInt1, new DATE((Timestamp)paramObject));

 } else if ((paramObject instanceof String)) {

setDateInternal(paramInt1, Date.valueOf((String)paramObject));

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 92:

 if ((paramObject instanceof Time)) {

setTimeInternal(paramInt1, (Time)paramObject);

 } else if ((paramObject instanceof Timestamp)) {

setTimeInternal(paramInt1, new Time(((Timestamp)paramObject).getTime()));

}

 else if ((paramObject instanceof Date)) {

setTimeInternal(paramInt1, new Time(((Date)paramObject).getTime()));

 } else if ((paramObject instanceof String)) {

setTimeInternal(paramInt1, Time.valueOf((String)paramObject));

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case 93:

 if ((paramObject instanceof TIMESTAMP)) {

setTIMESTAMPInternal(paramInt1, (TIMESTAMP)paramObject);

 } else if ((paramObject instanceof Timestamp)) {

setTimestampInternal(paramInt1, (Timestamp)paramObject);

 } else if ((paramObject instanceof Date)) {

setTIMESTAMPInternal(paramInt1, new TIMESTAMP((Date)paramObject));

 } else if ((paramObject instanceof DATE)) {

setTIMESTAMPInternal(paramInt1, new TIMESTAMP(((DATE)paramObject).timestampValue()));

 } else if ((paramObject instanceof String)) {

setTimestampInternal(paramInt1, Timestamp.valueOf((String)paramObject));

}

 else {

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 132);


localSQLException.fillInStackTrace();

throw localSQLException;

}


case -100:

setTIMESTAMPInternal(paramInt1, (TIMESTAMP)paramObject);


break;

case -101:

setTIMESTAMPTZInternal(paramInt1, (TIMESTAMPTZ)paramObject);


break;

case -102:

setTIMESTAMPLTZInternal(paramInt1, (TIMESTAMPLTZ)paramObject);


break;

case -103:

setINTERVALYMInternal(paramInt1, (INTERVALYM)paramObject);


break;

case -104:

setINTERVALDSInternal(paramInt1, (INTERVALDS)paramObject);


break;

case -8:

setROWIDInternal(paramInt1, (ROWID)paramObject);


break;

case 100:

setBinaryFloatInternal(paramInt1, (BINARY_FLOAT)paramObject);


break;

case 101:

setBinaryDoubleInternal(paramInt1, (BINARY_DOUBLE)paramObject);


break;

case 2004:

setBLOBInternal(paramInt1, (BLOB)paramObject);


break;

case 2005:

setCLOBInternal(paramInt1, (CLOB)paramObject);


break;

case -13:

setBFILEInternal(paramInt1, (BFILE)paramObject);


break;

case 2002:

case 2008:

setSTRUCTInternal(paramInt1, STRUCT.toSTRUCT(paramObject, this.connection));


break;

case 2003:

setARRAYInternal(paramInt1, ARRAY.toARRAY(paramObject, this.connection));


break;

case 2007:

setOPAQUEInternal(paramInt1, (OPAQUE)paramObject);


break;

case 2006:

setREFInternal(paramInt1, (REF)paramObject);


break;

default:

localSQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 4);

localSQLException.fillInStackTrace();

throw localSQLException;

}

}


~完~
文章比较粗糙,仅供参考。
|