package org.test4j.module.database.environment.typesmap; import java.io.InputStream; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.Timestamp; import java.sql.Types; import java.util.HashMap; import java.util.Map; import oracle.jdbc.driver.OracleTypes; import oracle.sql.BLOB; import oracle.sql.TIMESTAMP; import org.test4j.module.database.environment.typesmap.TypeMap.JavaSQLType; import org.test4j.tools.commons.DateHelper; @SuppressWarnings({ "rawtypes", "serial" }) public class OracleTypeMap extends AbstractTypeMap { private static TypeMap maps = new TypeMap() { private static final long serialVersionUID = 4142728734422012716L; { this.put("VARCHAR", String.class, Types.VARCHAR); this.put("VARCHAR2", String.class, Types.VARCHAR); this.put("NVARCHAR2", String.class, Types.VARCHAR); this.put("CHAR", String.class, Types.VARCHAR); this.put("NCHAR", String.class, Types.VARCHAR); // this.put("CLOB", CLOB.class, Types.CLOB); this.put("CLOB", String.class, Types.CLOB); this.put("BLOB", BLOB.class, Types.BLOB); this.put("RAW", byte[].class, Types.BINARY); this.put("ROWID", String.class, Types.VARCHAR); this.put("BINARY_INTEGER", BigDecimal.class, Types.NUMERIC); this.put("NUMBER", BigDecimal.class, Types.NUMERIC); this.put("FLOAT", BigDecimal.class, Types.NUMERIC); this.put("DATE", Timestamp.class, Types.TIMESTAMP); this.put("TIMESTAMP", Timestamp.class, Types.TIMESTAMP); this.put("REF", ResultSet.class, OracleTypes.CURSOR); // this.put("LONGVARCHAR", String.class, Types.VARCHAR); this.put("NUMERIC", BigDecimal.class, Types.DECIMAL); this.put("DECIMAL", BigDecimal.class, Types.DECIMAL); this.put("BIT", Boolean.class, Types.BOOLEAN); this.put("TINYINT", Byte.class, Types.BIT); this.put("SMALLINT", Short.class, Types.SMALLINT); } }; public static Class getJavaType(String type) { JavaSQLType map = maps.get(type); return map == null ? null : map.getJavaType(); } public static Integer getSQLType(String type) { JavaSQLType map = maps.get(type); return map == null ? null : map.getSqlType(); } public static Map<String, Class> types = new HashMap<String, Class>() { { // this.put("oracle.sql.CLOB", oracle.sql.CLOB.class); this.put("oracle.sql.CLOB", String.class); this.put("oracle.sql.BLOB", oracle.sql.BLOB.class); this.put("oracle.sql.TIMESTAMP", oracle.sql.TIMESTAMP.class); } }; /** * 将string对象转换为java对象 * * @param input * @param javaType * @return */ public Object toObjectByType(String input, Class javaType) { if (javaType == TIMESTAMP.class) { long time = DateHelper.parse(input).getTime(); Timestamp stamp = new Timestamp(time); return new TIMESTAMP(stamp); } if (javaType == oracle.sql.CLOB.class || javaType == oracle.sql.BLOB.class) { InputStream is = getStream(input); return is; } return input; } @Override protected Class getJavaTypeByName(String typeName) { Class type = types.get(typeName); return type == null ? String.class : type; } @Override protected Object getDefaultValue(Class javaType) { if (javaType == TIMESTAMP.class) { java.util.Date now = new java.util.Date(); Timestamp stamp = new Timestamp(now.getTime()); return new TIMESTAMP(stamp); } if (javaType == oracle.sql.CLOB.class || javaType == oracle.sql.BLOB.class) { InputStream is = getStream("stream"); return is; } return null; } }