package com.taobao.tddl.common.jdbc; import java.io.InputStream; import java.io.Reader; import java.math.BigDecimal; import java.net.URL; import java.sql.Array; import java.sql.Blob; import java.sql.Clob; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.Ref; import java.sql.SQLException; import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.List; import java.util.Map; /** * PreparedStatement设置参数的处理 * * @author linxuan */ public enum ParameterMethod { setArray, setAsciiStream, setBigDecimal, setBinaryStream, setBlob, setBoolean, setByte, setBytes, // setCharacterStream, setClob, setDate1, setDate2, setDouble, setFloat, setInt, setLong, // setNull1, setNull2, setObject1, setObject2, setObject3, setRef, setShort, setString, // setTime1, setTime2, setTimestamp1, setTimestamp2, setURL, setUnicodeStream; // /** * eachElementInList[0]:ParameterMethod * eachElementInList[1]:ps.setXXX()的参数列表,组成见setParameter * * @param methodAndArgsList的每一个元素(eachElementInList)是一个Object数组。每个数组包含两个元素: */ public static void setParameters(PreparedStatement stmt, List<Object[]> methodAndArgsList) throws SQLException { for (Object[] methodAndArgs : methodAndArgsList) { ParameterMethod pm = (ParameterMethod) methodAndArgs[0]; Object[] args = (Object[]) methodAndArgs[1]; pm.setParameter(stmt, args); } } public static void setParameters(PreparedStatement stmt, Map<Integer, ParameterContext> parameterSettings) throws SQLException { if (null != parameterSettings) { for (ParameterContext context : parameterSettings.values()) { context.getParameterMethod().setParameter(stmt, context.getArgs()); } } } /** * args[0]: index args[1..n] 参数 * * @throws SQLException */ @SuppressWarnings("deprecation") public void setParameter(PreparedStatement stmt, Object... args) throws SQLException { switch (this) { case setArray: stmt.setArray((Integer) args[0], (Array) args[1]); break; case setAsciiStream: stmt.setAsciiStream((Integer) args[0], (InputStream) args[1], (Integer) args[2]); break; case setBigDecimal: stmt.setBigDecimal((Integer) args[0], (BigDecimal) args[1]); break; case setBinaryStream: stmt.setBinaryStream((Integer) args[0], (InputStream) args[1], (Integer) args[2]); break; case setBlob: stmt.setBlob((Integer) args[0], (Blob) args[1]); break; case setBoolean: stmt.setBoolean((Integer) args[0], (Boolean) args[1]); break; case setByte: stmt.setByte((Integer) args[0], (Byte) args[1]); break; case setBytes: stmt.setBytes((Integer) args[0], (byte[]) args[1]); break; case setCharacterStream: stmt.setCharacterStream((Integer) args[0], (Reader) args[1], (Integer) args[2]); break; case setClob: stmt.setClob((Integer) args[0], (Clob) args[1]); break; case setDate1: stmt.setDate((Integer) args[0], (Date) args[1]); break; case setDate2: stmt.setDate((Integer) args[0], (Date) args[1], (Calendar) args[2]); break; case setDouble: stmt.setDouble((Integer) args[0], (Double) args[1]); break; case setFloat: stmt.setFloat((Integer) args[0], (Float) args[1]); break; case setInt: stmt.setInt((Integer) args[0], (Integer) args[1]); break; case setLong: stmt.setLong((Integer) args[0], (Long) args[1]); break; case setNull1: stmt.setNull((Integer) args[0], (Integer) args[1]); break; case setNull2: stmt.setNull((Integer) args[0], (Integer) args[1], (String) args[2]); break; case setObject1: stmt.setObject((Integer) args[0], args[1]); break; case setObject2: stmt.setObject((Integer) args[0], args[1], (Integer) args[2]); break; case setObject3: stmt.setObject((Integer) args[0], args[1], (Integer) args[2], (Integer) args[3]); break; case setRef: stmt.setRef((Integer) args[0], (Ref) args[1]); break; case setShort: stmt.setShort((Integer) args[0], (Short) args[1]); break; case setString: stmt.setString((Integer) args[0], (String) args[1]); break; case setTime1: stmt.setTime((Integer) args[0], (Time) args[1]); break; case setTime2: stmt.setTime((Integer) args[0], (Time) args[1], (Calendar) args[2]); break; case setTimestamp1: stmt.setTimestamp((Integer) args[0], (Timestamp) args[1]); break; case setTimestamp2: stmt.setTimestamp((Integer) args[0], (Timestamp) args[1], (Calendar) args[2]); break; case setURL: stmt.setURL((Integer) args[0], (URL) args[1]); break; case setUnicodeStream: stmt.setUnicodeStream((Integer) args[0], (InputStream) args[1], (Integer) args[2]); break; default: throw new IllegalArgumentException("Unhandled ParameterMethod:" + this.name()); } } }