Storm-JDBC 中Date类型转换bug

在Storm-JDBC中SimpleJdbcMapper类下,如果Column的类型为Time,Date,TIMESTAMP的话,默认是取值转换成Long类型的,如下为源码

else if(Util.getJavaType(columnSqlType).equals(Date.class)) {
    Long value = tuple.getLongByField(columnName);
    columns.add(new Column(columnName, new Date(value), columnSqlType));
} else if(Util.getJavaType(columnSqlType).equals(Time.class)) {
    Long value = tuple.getLongByField(columnName);
    columns.add(new Column(columnName, new Time(value), columnSqlType));
} else if(Util.getJavaType(columnSqlType).equals(Timestamp.class)) {
    Long value = tuple.getLongByField(columnName);
    columns.add(new Column(columnName, new Timestamp(value), columnSqlType));
}
如果用默认的源码的话,要formate下把Date类型转换成Long不然会报错,错误如下:

java.lang.ClassCastException: java.sql.Date cannot be cast to java.lang.Long
at backtype.storm.tuple.TupleImpl.getLongByField(TupleImpl.java:161) ~[storm-core-0.10.2.jar:0.10.2]


现在提供两种方案:

1.按照源码的规则转换,如时间类型format

private static Date date = new Date();
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmss");

2.重写SimpleJdbcMapper,继承 JdbcMapper接口;如下转换为object类型
else if (Util.getJavaType(columnSqlType).equals(Date.class)) {
    Object value = tuple.getValueByField(columnName);
    columns.add(new Column(columnName, value, columnSqlType.intValue()));
} else if (Util.getJavaType(columnSqlType).equals(Time.class)) {
    Object value = tuple.getValueByField(columnName);
    columns.add(new Column(columnName, value, columnSqlType.intValue()));
} else if (Util.getJavaType(columnSqlType).equals(Timestamp.class)) {
    Object value = tuple.getValueByField(columnName);
    columns.add(new Column(columnName, value, columnSqlType.intValue()));
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值