package jef.database.meta; import javax.persistence.Column; /** * 数据库支持的一个数据类型 * * @author Jiyi * */ public final class DataType { /** * name */ @Column(name = "TYPE_NAME") private String typeName; /** * SQL data type from java.sql.Types */ @Column(name = "DATA_TYPE") private int dataType; /** * maximum precision */ @Column(name = "PRECISION") private int precision; /** * can you use NULL for this type. typeNoNulls - does not allow NULL values * typeNullable - allows NULL values typeNullableUnknown - nullability * unknown */ @Column(name = "NULLABLE") private short nullable; /** * boolean=> is it case sensitive. */ @Column(name = "CASE_SENSITIVE") private boolean caseSensitive; /** * short => can you use "WHERE" based on this type: typePredNone - No * support typePredChar - Only supported with WHERE .. LIKE typePredBasic - * Supported except for WHERE .. LIKE typeSearchable - Supported for all * WHERE .. */ @Column(name = "SEARCHABLE") private short searchable; /** * boolean => is it unsigned. * */ @Column(name = "UNSIGNED_ATTRIBUTE") private boolean unsigned; /** * can it be a money value. */ @Column(name = "FIXED_PREC_SCALE") private boolean fixedPrecScale; /** * can it be used for an auto-increment value. */ @Column(name = "AUTO_INCREMENT") private boolean autoIncrement; /** * minimum scale supported */ @Column(name = "MINIMUM_SCALE") private short minimumScale; /** * maximum scale supported * */ @Column(name = "MAXIMUM_SCALE") private short maximumScale; @Column(name = "SQL_DATA_TYPE") private int sqlDataType; /** * int => usually 2 or 10 */ @Column(name = "NUM_PREC_RADIX") private int numPrecRadix; public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public int getDataType() { return dataType; } public void setDataType(int dataType) { this.dataType = dataType; } public int getPrecision() { return precision; } public void setPrecision(int precision) { this.precision = precision; } public short isNullable() { return nullable; } public void setNullable(short nullable) { this.nullable = nullable; } public boolean isCaseSensitive() { return caseSensitive; } public void setCaseSensitive(boolean caseSensitive) { this.caseSensitive = caseSensitive; } public short getSearchable() { return searchable; } public void setSearchable(short searchable) { this.searchable = searchable; } public boolean isUnsigned() { return unsigned; } public void setUnsigned(boolean unsigned) { this.unsigned = unsigned; } public boolean isFixedPrecScale() { return fixedPrecScale; } public void setFixedPrecScale(boolean fixedPrecScale) { this.fixedPrecScale = fixedPrecScale; } public boolean isAutoIncrement() { return autoIncrement; } public void setAutoIncrement(boolean autoIncrement) { this.autoIncrement = autoIncrement; } public short getMinimumScale() { return minimumScale; } public void setMinimumScale(short minimumScale) { this.minimumScale = minimumScale; } public short getMaximumScale() { return maximumScale; } public void setMaximumScale(short maximumScale) { this.maximumScale = maximumScale; } public int getSqlDataType() { return sqlDataType; } public void setSqlDataType(int sqlDataType) { this.sqlDataType = sqlDataType; } public int getNumPrecRadix() { return numPrecRadix; } public void setNumPrecRadix(int numPrecRadix) { this.numPrecRadix = numPrecRadix; } @Override public String toString() { StringBuilder sb=new StringBuilder(typeName); sb.append('(').append(dataType).append(')'); if(this.autoIncrement){ sb.append(" auto-increament"); } if(this.unsigned){ sb.append(" unsigned"); } if(this.dataType==java.sql.Types.VARCHAR || this.dataType==java.sql.Types.CHAR){ if(!this.caseSensitive){ sb.append(" case-insensitive"); } } if(this.fixedPrecScale){ sb.append(" fixed-scale"); } return sb.toString(); } }