/************************************************************************************** * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package com.espertech.esper.util; import java.util.Map; import java.util.HashMap; import java.sql.*; import java.math.BigDecimal; /** * Enumeration of the different Java built-in types that are used to represent database output column values. * <p> * Assigns a name to each type that serves as a short name in mapping, and a Java class type. * <p> * Provides binding implementations that use the correct ResultSet.get method to pull the correct type * out of a statement's result set. */ public enum DatabaseTypeEnum { /** * String type. */ String (String.class), /** * Big decimal. */ BigDecimal (BigDecimal.class), /** * Boolean type. */ Boolean (Boolean.class), /** * Byte type. */ Byte (Byte.class), /** * Short type. */ Short (Short.class), /** * Integer type. */ Int (Integer.class), /** * Long type. */ Long (Long.class), /** * Float type. */ Float (Float.class), /** * Double type. */ Double (Double.class), /** * Byte array type. */ ByteArray (byte[].class), /** * SQL Date type. */ SqlDate (Date.class), /** * SQL time type. */ SqlTime (Time.class), /** * SQL timestamp type. */ SqlTimestamp (Timestamp.class); private Class javaClass; private DatabaseTypeEnum(Class javaClass) { this.javaClass = javaClass; } /** * Retuns the Java class for the name. * @return Java class */ public Class getJavaClass() { return javaClass; } /** * Given a type name, matches for simple and fully-qualified Java class name (case-insensitive) * as well as case-insensitive type name. * @param type is the named type * @return type enumeration value for type */ public static DatabaseTypeEnum getEnum(String type) { String boxedType = JavaClassHelper.getBoxedClassName(type); for (DatabaseTypeEnum val : DatabaseTypeEnum.values()) { if (val.toString().toLowerCase().equals(type.toLowerCase())) { return val; } if (val.getJavaClass().getName().toLowerCase().equals(type.toLowerCase())) { return val; } if (val.getJavaClass().getName().toLowerCase().equals(boxedType)) { return val; } if (val.getJavaClass().getSimpleName().toLowerCase().equals(boxedType)) { return val; } } return null; } /** * Returns the binding for this enumeration value for * reading the database result set and returning the right Java type. * @return mapping of output column type to Java built-in */ public DatabaseTypeBinding getBinding() { return bindings.get(this); } private static Map<DatabaseTypeEnum, DatabaseTypeBinding> bindings; static { bindings = new HashMap<DatabaseTypeEnum, DatabaseTypeBinding>(); bindings.put(String, new DatabaseTypeBinding() { private static final long serialVersionUID = -5155039606411608898L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getString(columnName); } public Class getType() { return String.class; } }); bindings.put(BigDecimal, new DatabaseTypeBinding() { private static final long serialVersionUID = -648825691097776732L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getBigDecimal(columnName); } public Class getType() { return BigDecimal.class; } }); bindings.put(Boolean, new DatabaseTypeBinding() { private static final long serialVersionUID = 5760469994325386982L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getBoolean(columnName); } public Class getType() { return Boolean.class; } }); bindings.put(Byte, new DatabaseTypeBinding() { private static final long serialVersionUID = -2840004368317980229L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getByte(columnName); } public Class getType() { return Byte.class; } }); bindings.put(ByteArray, new DatabaseTypeBinding() { private static final long serialVersionUID = 7531500030996242544L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getBytes(columnName); } public Class getType() { return byte[].class; } }); bindings.put(Double, new DatabaseTypeBinding() { private static final long serialVersionUID = -7421693646427315376L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getDouble(columnName); } public Class getType() { return Double.class; } }); bindings.put(Float, new DatabaseTypeBinding() { private static final long serialVersionUID = -3368945008278992912L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getFloat(columnName); } public Class getType() { return Float.class; } }); bindings.put(Int, new DatabaseTypeBinding() { private static final long serialVersionUID = 84694877489363201L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getInt(columnName); } public Class getType() { return Integer.class; } }); bindings.put(Long, new DatabaseTypeBinding() { private static final long serialVersionUID = -1021242584650775564L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getLong(columnName); } public Class getType() { return Long.class; } }); bindings.put(Short, new DatabaseTypeBinding() { private static final long serialVersionUID = -2922908857447642497L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getShort(columnName); } public Class getType() { return Short.class; } }); bindings.put(SqlDate, new DatabaseTypeBinding() { private static final long serialVersionUID = 7869800941910757215L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getDate(columnName); } public Class getType() { return java.sql.Date.class; } }); bindings.put(SqlTime, new DatabaseTypeBinding() { private static final long serialVersionUID = -5259494991875064798L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getTime(columnName); } public Class getType() { return java.sql.Time.class; } }); bindings.put(SqlTimestamp, new DatabaseTypeBinding() { private static final long serialVersionUID = -8708251362439431175L; public Object getValue(ResultSet resultSet, String columnName) throws SQLException { return resultSet.getTimestamp(columnName); } public Class getType() { return Timestamp.class; } }); } }