web-dev-qa-db-ja.com

PreparedStatementの「setObject」メソッドはどのデータ型にも使用できますか?

PreparedStatement.setObjectメソッドは任意のデータ型に使用できます(StringIntegerDoubleDateDateTimeByte Arrayなど)は、個々の.setInt.setDoubleなどのメソッド?

ありがとう!

16
C_Neth

はい。しかし、それはJDBCドライバーに依存します。 Int値を渡す場合、setObjectはsetInt()メソッドに変換します

渡されたオブジェクトは、JDBCドライバーのPreparedStatement実装クラスによって分析されます。

Mysql JDBCコネクタのコードスニペット

public void setObject(int parameterIndex, Object parameterObj) throws SQLException {
    synchronized (checkClosed().getConnectionMutex()) {
        if (parameterObj == null) {
            setNull(parameterIndex, Java.sql.Types.OTHER);
        } else {
            if (parameterObj instanceof Byte) {
                setInt(parameterIndex, ((Byte) parameterObj).intValue());
            } else if (parameterObj instanceof String) {
                setString(parameterIndex, (String) parameterObj);
            } else if (parameterObj instanceof BigDecimal) {
                setBigDecimal(parameterIndex, (BigDecimal) parameterObj);
            } else if (parameterObj instanceof Short) {
                setShort(parameterIndex, ((Short) parameterObj).shortValue());
            } else if (parameterObj instanceof Integer) {
                setInt(parameterIndex, ((Integer) parameterObj).intValue());
            } else if (parameterObj instanceof Long) {
                setLong(parameterIndex, ((Long) parameterObj).longValue());
            } else if (parameterObj instanceof Float) {
                setFloat(parameterIndex, ((Float) parameterObj).floatValue());
            } else if (parameterObj instanceof Double) {
                setDouble(parameterIndex, ((Double) parameterObj).doubleValue());
            } else if (parameterObj instanceof byte[]) {
                setBytes(parameterIndex, (byte[]) parameterObj);
            } else if (parameterObj instanceof Java.sql.Date) {
                setDate(parameterIndex, (Java.sql.Date) parameterObj);
            } else if (parameterObj instanceof Time) {
                setTime(parameterIndex, (Time) parameterObj);
            } else if (parameterObj instanceof Timestamp) {
                setTimestamp(parameterIndex, (Timestamp) parameterObj);
            } else if (parameterObj instanceof Boolean) {
                setBoolean(parameterIndex, ((Boolean) parameterObj).booleanValue());
            } else if (parameterObj instanceof InputStream) {
                setBinaryStream(parameterIndex, (InputStream) parameterObj, -1);
            } else if (parameterObj instanceof Java.sql.Blob) {
                setBlob(parameterIndex, (Java.sql.Blob) parameterObj);
            } else if (parameterObj instanceof Java.sql.Clob) {
                setClob(parameterIndex, (Java.sql.Clob) parameterObj);
            } else if (this.connection.getTreatUtilDateAsTimestamp() && parameterObj instanceof Java.util.Date) {
                setTimestamp(parameterIndex, new Timestamp(((Java.util.Date) parameterObj).getTime()));
            } else if (parameterObj instanceof BigInteger) {
                setString(parameterIndex, parameterObj.toString());
            } else {
                setSerializableObject(parameterIndex, parameterObj);
            }
        }
    }
}

詳細については、「com.mysql.jdbc」パッケージの「PreparedStatement」クラスを参照してください。

27
Yoonsung.Jung