java的基本数据类型有八种:
byte、short、int、long、float、double、char、boolean
总结java和mysql、oracle、pgsql数据类型对应关系
java | byte | short | int | long | float | double | char | boolean | string | java.sql.Date | java.math.BigDecimal | java.sql.Blob | java.sql.Clob |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mysql | - | - | int、tinyint、smallint | bigint | float | double | - | bit | char、varchar、text | date、time、datetime、timestamp | decimal | blob | clob |
oracle | - | - | INTEGER、NUMBER | NUMBER | NUMBER、BINARY_FLOAT | NUMBER、BINARY_DOUBLE | - | NUMBER | CHAR、VARCHAR、VARCHAR2 | DATE、TIMESTAMP | NUMBER | BLOB | CLOB |
pgsql | - | - | int2、int4 | int8 | float4 | float8 | - | bool | varchar、text | date、time、timestamp、 | numeric | blob | clob |
注:
char是定长,使用空格向右补充;varchar是变长
mysql的datetime和timestamp的区别在于,timestamp在数据库可以自动更新(当前时间)
mysql的date(只有日期) time(只有时间) datetime(日期时间)
bit存放一位数值0或者1,而且一般被int取代 true 1 false 0
CLOB和BLOB的区别
1)CLOB使用CHAR来保存数据。 如:保存XML文档。
2)BLOB就是使用二进制保存数据。 如:保存位图。
3)JAVA里面对CLOB的操作
在绝大多数情况下,使用CLOB相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可在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的源码