总结java数据类型和mysql、oracle、pgsql数据类型对应关系,附数据库字段类型转java类型代码

11 篇文章 1 订阅

java的基本数据类型有八种:
byte、short、int、long、float、double、char、boolean

总结java和mysql、oracle、pgsql数据类型对应关系

javabyteshortintlongfloatdoublecharbooleanstringjava.sql.Datejava.math.BigDecimaljava.sql.Blobjava.sql.Clob
mysql--int、tinyint、smallintbigintfloatdouble-bitchar、varchar、textdate、time、datetime、timestampdecimalblobclob
oracle--INTEGER、NUMBERNUMBERNUMBER、BINARY_FLOATNUMBER、BINARY_DOUBLE-NUMBERCHAR、VARCHAR、VARCHAR2DATE、TIMESTAMPNUMBERBLOBCLOB
pgsql--int2、int4int8float4float8-boolvarchar、textdate、time、timestamp、numericblobclob

注:

  1. char是定长,使用空格向右补充;varchar是变长

  2. mysql的datetime和timestamp的区别在于,timestamp在数据库可以自动更新(当前时间)

  3. mysql的date(只有日期) time(只有时间) datetime(日期时间)

  4. bit存放一位数值0或者1,而且一般被int取代 true 1 false 0

  5. CLOB和BLOB的区别
    1)CLOB使用CHAR来保存数据。 如:保存XML文档。
    2)BLOB就是使用二进制保存数据。 如:保存位图。
    3)JAVA里面对CLOB的操作
    在绝大多数情况下,使用CLOB相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可

  6. 在oracle中varchar和varchar2有什么区别?
    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
    2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
    3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
    大部分情况下建议使用varchar2类型,可以保证更好的兼容性

mysql字段类型转java类型的方法代码

public class MySqlTypeConvert implements ITypeConvert {
    public MySqlTypeConvert() {
    }

    /**
     * mysql字段类型转java类型
     * @param fieldType mysql字段类型
     * @return
     */
    public DbColumnType processTypeConvert(String fieldType) {
        String t = fieldType.toLowerCase();
        if (!t.contains("char") && !t.contains("text")) {
            if (t.contains("bigint")) {
                return DbColumnType.LONG;
            } else if (t.contains("int")) {
                return DbColumnType.INTEGER;
            } else if (!t.contains("date") && !t.contains("time") && !t.contains("year")) {
                if (t.contains("text")) {
                    return DbColumnType.STRING;
                } else if (t.contains("bit")) {
                    return DbColumnType.BOOLEAN;
                } else if (t.contains("decimal")) {
                    return DbColumnType.BIG_DECIMAL;
                } else if (t.contains("clob")) {
                    return DbColumnType.CLOB;
                } else if (t.contains("blob")) {
                    return DbColumnType.BLOB;
                } else if (t.contains("binary")) {
                    return DbColumnType.BYTE_ARRAY;
                } else if (t.contains("float")) {
                    return DbColumnType.FLOAT;
                } else if (t.contains("double")) {
                    return DbColumnType.DOUBLE;
                } else {
                    return !t.contains("json") && !t.contains("enum") ? DbColumnType.STRING : DbColumnType.STRING;
                }
            } else {
                return DbColumnType.DATE;
            }
        } else {
            return DbColumnType.STRING;
        }
    }
}

oracle字段类型转java类型的方法代码

public class OracleTypeConvert implements ITypeConvert {
    public OracleTypeConvert() {
    }

    /**
     * oracle字段类型转java类型
     * @param fieldType oracle字段类型
     * @return
     */
    public DbColumnType processTypeConvert(String fieldType) {
        String t = fieldType.toUpperCase();
        if (t.contains("CHAR")) {
            return DbColumnType.STRING;
        } else if (!t.contains("DATE") && !t.contains("TIMESTAMP")) {
            if (t.contains("NUMBER")) {
                if (t.matches("NUMBER\\(+\\d\\)")) {
                    return DbColumnType.INTEGER;
                } else {
                    return t.matches("NUMBER\\(+\\d{2}+\\)") ? DbColumnType.LONG : DbColumnType.DOUBLE;
                }
            } else if (t.contains("FLOAT")) {
                return DbColumnType.FLOAT;
            } else if (t.contains("clob")) {
                return DbColumnType.CLOB;
            } else if (t.contains("BLOB")) {
                return DbColumnType.OBJECT;
            } else if (t.contains("binary")) {
                return DbColumnType.BYTE_ARRAY;
            } else {
                return t.contains("RAW") ? DbColumnType.BYTE_ARRAY : DbColumnType.STRING;
            }
        } else {
            return DbColumnType.DATE;
        }
    }
}

pgsql字段类型转java类型的方法代码

public class PostgreSqlTypeConvert implements ITypeConvert {
    public PostgreSqlTypeConvert() {
    }

    public DbColumnType processTypeConvert(String fieldType) {
        String t = fieldType.toLowerCase();
        if (!t.contains("char") && !t.contains("text")) {
            if (t.contains("bigint")) {
                return DbColumnType.LONG;
            } else if (t.contains("int")) {
                return DbColumnType.INTEGER;
            } else if (!t.contains("date") && !t.contains("time") && !t.contains("year")) {
                if (t.contains("text")) {
                    return DbColumnType.STRING;
                } else if (t.contains("bit")) {
                    return DbColumnType.BOOLEAN;
                } else if (t.contains("decimal")) {
                    return DbColumnType.BIG_DECIMAL;
                } else if (t.contains("clob")) {
                    return DbColumnType.CLOB;
                } else if (t.contains("blob")) {
                    return DbColumnType.BYTE_ARRAY;
                } else if (t.contains("float")) {
                    return DbColumnType.FLOAT;
                } else if (t.contains("double")) {
                    return DbColumnType.DOUBLE;
                } else if (!t.contains("json") && !t.contains("enum")) {
                    return t.contains("boolean") ? DbColumnType.BOOLEAN : DbColumnType.STRING;
                } else {
                    return DbColumnType.STRING;
                }
            } else {
                return DbColumnType.DATE;
            }
        } else {
            return DbColumnType.STRING;
        }
    }
}
public enum DbColumnType {
    BASE_INT("int", (String)null),
    BASE_BOOLEAN("boolean", (String)null),
    BASE_FLOAT("float", (String)null),
    BASE_DOUBLE("double", (String)null),
    STRING("String", (String)null),
    LONG("Long", (String)null),
    INTEGER("Integer", (String)null),
    FLOAT("Float", (String)null),
    DOUBLE("Double", (String)null),
    BOOLEAN("Boolean", (String)null),
    BYTE_ARRAY("byte[]", (String)null),
    CHARACTER("Character", (String)null),
    OBJECT("Object", (String)null),
    DATE("Date", "java.util.Date"),
    TIME("Time", "java.sql.Time"),
    BLOB("Blob", "java.sql.Blob"),
    CLOB("Clob", "java.sql.Clob"),
    TIMESTAMP("Timestamp", "java.sql.Timestamp"),
    BIG_INTEGER("BigInteger", "java.math.BigInteger"),
    BIG_DECIMAL("BigDecimal", "java.math.BigDecimal"),
    LOCAL_DATE("LocalDate", "java.time.LocalDate"),
    LOCAL_TIME("LocalTime", "java.time.LocalTime"),
    LOCAL_DATE_TIME("LocalDateTime", "java.time.LocalDateTime");

    private final String type;
    private final String pkg;

    private DbColumnType(String type, String pkg) {
        this.type = type;
        this.pkg = pkg;
    }

    public String getType() {
        return this.type;
    }

    public String getPkg() {
        return this.pkg;
    }
}

注:
这里参考了mybatis-plus-2.0.6.jar的生成实体类的源码,具体可以查看mybatis-plus的源码

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值