package cn.org.rapid_framework.generator.util.typemapping;
import java.sql.Types;
import java.util.HashMap;
/**
*
* @author badqiu
* @email badqiu(a)gmail.com
*/
public class DatabaseDataTypesUtils {
private final static IntStringMap _preferredJavaTypeForSqlType = new IntStringMap();
public static boolean isFloatNumber(String javaType) {
if(javaType.endsWith("Float") || javaType.endsWith("Double") || javaType.endsWith("BigDecimal") || javaType.endsWith("BigInteger")) {
return true;
}
if(javaType.endsWith("float") || javaType.endsWith("double") || javaType.endsWith("BigDecimal") || javaType.endsWith("BigInteger")) {
return true;
}
return false;
}
public static boolean isIntegerNumber(String javaType) {
if(javaType.endsWith("Long") || javaType.endsWith("Integer") || javaType.endsWith("Short") || javaType.endsWith("Byte")) {
return true;
}
if(javaType.endsWith("long") || javaType.endsWith("int") || javaType.endsWith("short") || javaType.endsWith("byte")) {
return true;
}
return false;
}
public static boolean isDate(String javaType) {
if(javaType.endsWith("Date") || javaType.endsWith("Timestamp") || javaType.endsWith("Time")) {
return true;
}
return false;
}
public static boolean isString(String javaType) {
if(javaType.endsWith("String")) {
return true;
}
return false;
}
public static String getPreferredJavaType(int sqlType, int size,
int decimalDigits) {
if ((sqlType == Types.DECIMAL || sqlType == Types.NUMERIC)
&& decimalDigits == 0) {
if (size == 1) {
// https://sourceforge.net/tracker/?func=detail&atid=415993&aid=662953&group_id=36044
return "java.lang.Boolean";
} else if (size < 3) {//[2,2]
return "java.lang.Byte";
} else if (size < 5) {//[3,4]
return "java.lang.Short";
} else if (size < 10) {//[5,9]
return "java.lang.Integer";
} else if (size < 19) {
return "java.lang.Long";
} else {
return "java.math.BigDecimal";
}
}
String result = _preferredJavaTypeForSqlType.getString(sqlType);
if (result == null) {
result = "java.lang.Object";
}
return result;
}
static {
_preferredJavaTypeForSqlType.put(Types.TINYINT, "java.lang.Byte");
_preferredJavaTypeForSqlType.put(Types.SMALLINT, "java.lang.Short");
_preferredJavaTypeForSqlType.put(Types.INTEGER, "java.lang.Integer");
_preferredJavaTypeForSqlType.put(Types.BIGINT, "java.lang.Long");
_preferredJavaTypeForSqlType.put(Types.REAL, "java.lang.Float");
_preferredJavaTypeForSqlType.put(Types.FLOAT, "java.lang.Double");
_preferredJavaTypeForSqlType.put(Types.DOUBLE, "java.lang.Double");
_preferredJavaTypeForSqlType.put(Types.DECIMAL, "java.math.BigDecimal");
_preferredJavaTypeForSqlType.put(Types.NUMERIC, "java.math.BigDecimal");
_preferredJavaTypeForSqlType.put(Types.BIT, "java.lang.Boolean");
_preferredJavaTypeForSqlType.put(Types.BOOLEAN, "java.lang.Boolean");
_preferredJavaTypeForSqlType.put(Types.CHAR, "java.lang.String");
_preferredJavaTypeForSqlType.put(Types.VARCHAR, "java.lang.String");
// according to resultset.gif, we should use java.io.Reader, but String is more convenient for EJB
_preferredJavaTypeForSqlType.put(Types.LONGVARCHAR, "java.lang.String");
_preferredJavaTypeForSqlType.put(Types.BINARY, "byte[]");
_preferredJavaTypeForSqlType.put(Types.VARBINARY, "byte[]");
_preferredJavaTypeForSqlType.put(Types.LONGVARBINARY, "byte[]");
_preferredJavaTypeForSqlType.put(Types.DATE, "java.sql.Date");
_preferredJavaTypeForSqlType.put(Types.TIME, "java.sql.Time");
_preferredJavaTypeForSqlType.put(Types.TIMESTAMP, "java.sql.Timestamp");
_preferredJavaTypeForSqlType.put(Types.CLOB, "java.sql.Clob");
_preferredJavaTypeForSqlType.put(Types.BLOB, "java.sql.Blob");
_preferredJavaTypeForSqlType.put(Types.ARRAY, "java.sql.Array");
_preferredJavaTypeForSqlType.put(Types.REF, "java.sql.Ref");
_preferredJavaTypeForSqlType.put(Types.STRUCT, "java.lang.Object");
_preferredJavaTypeForSqlType.put(Types.JAVA_OBJECT, "java.lang.Object");
}
private static class IntStringMap extends HashMap {
public String getString(int i) {
return (String) get(new Integer(i));
}
public String[] getStrings(int i) {
return (String[]) get(new Integer(i));
}
public void put(int i, String s) {
put(new Integer(i), s);
}
public void put(int i, String[] sa) {
put(new Integer(i), sa);
}
}
}