java 数据库映射_将数据库类型映射到具体的Java类

小编典典

答案比使用getMetaData方法要复杂得多,因为方法返回的整数类型getMetaData和完整的类名没有直接映射。该解决方案需要两段代码:

实现一种获取java.sql.Types常量整数值的方法。

创建一个将该值转换为类名的方法。

Java类型方法

以下方法检索元信息:

public String getJavaType( String schema, String object, String column )

throws Exception {

String fullName = schema + '.' + object + '.' + column;

DatabaseMetaData metaData = getConnection().getMetaData();

ResultSet columnMeta = metaData.getColumns( null, schema, object, column );

String javaType = null;

if( columnMeta.first() ) {

int dataType = columnMeta.getInt( "DATA_TYPE" );

javaType = SQLTypeMap.convert( dataType );

}

else {

throw new Exception( "Unknown database column " + fullName + '.' );

}

return javaType;

}

静态转换方法

常量整数值必须转换为类名。这可以通过以下方式完成:

import java.sql.Types;

/**

* Converts database types to Java class types.

*/

public class SQLTypeMap {

/**

* Translates a data type from an integer (java.sql.Types value) to a string

* that represents the corresponding class.

*

* @param type

* The java.sql.Types value to convert to its corresponding class.

* @return The class that corresponds to the given java.sql.Types

* value, or Object.class if the type has no known mapping.

*/

public static Class> toClass(int type) {

Class> result = Object.class;

switch (type) {

case Types.CHAR:

case Types.VARCHAR:

case Types.LONGVARCHAR:

result = String.class;

break;

case Types.NUMERIC:

case Types.DECIMAL:

result = java.math.BigDecimal.class;

break;

case Types.BIT:

result = Boolean.class;

break;

case Types.TINYINT:

result = Byte.class;

break;

case Types.SMALLINT:

result = Short.class;

break;

case Types.INTEGER:

result = Integer.class;

break;

case Types.BIGINT:

result = Long.class;

break;

case Types.REAL:

case Types.FLOAT:

result = Float.class;

break;

case Types.DOUBLE:

result = Double.class;

break;

case Types.BINARY:

case Types.VARBINARY:

case Types.LONGVARBINARY:

result = Byte[].class;

break;

case Types.DATE:

result = java.sql.Date.class;

break;

case Types.TIME:

result = java.sql.Time.class;

break;

case Types.TIMESTAMP:

result = java.sql.Timestamp.class;

break;

}

return result;

}

}

注意,不同的数据库在映射上可以有不同的变化。

2020-10-25

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值