数据库数值类型对应Integer还是int
最近在学习Hibernate,数据库是Oracle,⼀开始将Number类型映射为int。我⼀直都知道基本数据类型作为类的成员使⽤时有默认值,因为最初设计时我对每⼀个int的属性都有赋值,所以就没去处理Java给定int的默认值。但是,由于业务的改变,在⾸次存⼊数据库时某些int属性并没有赋值,于是默认值就开始污染数据库了。
下⾯详细说明下,当基本数据类型定义的变量作为类的成员使⽤时,Java会确保给定默认值,以保证这些成员变量得到初始化,以防⽌产⽣程序错误。但是,这些初始值对程序来说,可能不正确,甚⾄是不合法的,⽐如在我这个⼯程的业务中默认值0就⾮法。如果⼀定要使⽤基本数据类型,最好明确地对变量进⾏初始化。在对应数据库中的数值类型时,个⼈强烈建议使⽤Integer!不能因为⼀时的想法就去偷懒,⽽留下安全隐患。
基本成员默认值如下:
基本类型默认值
boolean false
char'\u0000'(null)
byte(byte)0
short0
int 0
long0L
float o.of
double o.0d
顺便附上Mysql Oracle Java数据类型对照表
Mysql Oracle Java
BIGINT NUMBER(19,0)java.lang.Long
BIT RAW byte[]
BLOB BLOB  RAW byte[]
CHAR CHAR java.lang.String
DATE DATE java.sql.Date
bigdecimal转换为integer
DATETIME DATE java.sql.Timestamp
DECIMAL FLOAT (24)java.math.BigDecimal
DOUBLE FLOAT (24)java.lang.Double
DOUBLE PRECISION FLOAT (24)java.lang.Double
ENUM VARCHAR2java.lang.String
FLOAT FLOAT java.lang.Float
INT NUMBER(10,0)java.lang.Integer
INTEGER NUMBER(10,0)java.lang.Integer
LONGBLOB BLOB RAW byte[]
LONGTEXT CLOB RAW java.lang.String
MEDIUMBLOB BLOB RAW byte[]
MEDIUMINT NUMBER(7,0)java.lang.Integer MEDIUMTEXT CLOB RAW java.lang.String NUMERIC NUMBER
REAL FLOAT (24)
SET VARCHAR2java.lang.String SMALLINT NUMBER(5,0)java.lang.Integer TEXT VARCHAR2 CLOB java.lang.String TIME DATE java.sql.Time TIMESTAMP DATE java.sql.Timestamp TINYBLOB RAW byte[]
TINYINT NUMBER(3,0)java.lang.Boolean TINYTEXT VARCHAR2java.lang.String VARCHAR VARCHAR2 CLOB java.lang.String
java.sql.Date YEAR NUMBER

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。