oracle里存的是number类型,java查询出来的对象属性是bigdecimal类型,该怎么解决?

OnEstepEnD 2012-05-30 04:13:13
Oracle数据库表里是testNum number(2)
Java类里的属性是testNum int
但是我用this.getSession().createSQLQuery(sql)查询出来的结果对象里对应的属性却是bigdecimal
所以必须进行类型强转,否则报错类型转换错误。


这里该怎么处理,让从数据查询出来的数据就是int类型,而不是bigdecimal呢?谢谢。

java.lang.ClassCastException: [Ljava.lang.Object;
...全文
3373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_word521 2015-01-23
  • 打赏
  • 举报
回复
这块我也纠结了很久,最近没啥忙的看了struts2的源代码。DefaultTypeConverter这个类研究研究就明白了
OnEstepEnD 2012-06-18
  • 打赏
  • 举报
回复
谢谢各位了,问题没解决,现在用hibernate查询。查询出来在取或者转类型肯定可以,本来想查出来就是想要的类型,懒得转的。虽然不太喜欢hql,但是它查出来的对象是转换好的,稍微方便点。
beiouwolf 2012-05-31
  • 打赏
  • 举报
回复
这个...你用oracle之前不先查一下jdbc对应字段类型的吗...
对于数值类型来说
oracle JDBC
INTEGER -> short, int, long 是字段情况,一般用long
NUMBER -> float, doule, java.math.BigDecimal 存在小数定义下,映射为float/double,否则映射为BigDecimal
荷梅月剑 2012-05-31
  • 打赏
  • 举报
回复
很正常的,用java查出来的就是BigDecimal型,用BigDecimal.intValue()一下就可以了。
像我们公司,计算时都是BigDecimal,double都不让用。
顺便送你个BigDecimal的计算方法
http://fengbin2005.iteye.com/blog/1122832
未来纪元 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
BigDecimal b = new BigDecimal(100);
int i = b.intValue();
[/Quote]
+1
不好意思,眼花了
未来纪元 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
Oracle数据库表里是testNum number(2)
Java类里的属性是testNum int
但是我用this.getSession().createSQLQuery(sql)查询出来的结果对象里对应的属性却是bigdecimal
所以必须进行类型强转,否则报错类型转换错误。


这里该怎么处理,让从数据查询出来的数据就是int类型,而不是bigdecimal呢?谢谢。

……
[/Quote]
+1
brightyq 2012-05-30
  • 打赏
  • 举报
回复
BigDecimal b = new BigDecimal(100);
int i = b.intValue();
dbking 0.6
==========

dbking是一款基于Java的数据库处理工具集,主要包括三项主要内容:
1、为各类数据库提供统一的操作接口,尽最大可能保障各类数据库之间的移植性
2、通过生成器创建BO类及DAO层代码
3、为各类数据库之间的数据导入导出提供高效率的工具
下面对这三项功能进行详细的介绍。

1、为各类数据库提供统一的操作接口,尽最大可能保障各类数据库之间的移植性
  这类工具已经很多了,比如大家耳熟能详的Hibernate、iBatis,包括Apache的DBUtils、Spring的JdbcTemplate。为什么我们还要推出db-unifier这样一个功能类似的东西呢?
  这些工具的主要目的都是对JDBC进行包装,使开发人员能更容易的进行数据库开发,在代码的可读性、性能问题、移植问题上,这些工具都尽量做了权衡,达到了他们认为的完美。
  dbking是鉴于我们的开发经验和考虑,权衡出来的数据库工具,其主要考虑的方向有以下几点:
  1、简洁。所有的核心接口都在一个类里边,这个类是DbKing,代码不过1000行,却提供了大量的高质量功能方法,使用方法更是一目了然的简单。DbKing核心只依赖于JDBC驱动类,十分的轻量级,易于使用。
  2、避免数据库连接泄漏的问题。数据库建立连接、关闭连接默认情况下都由db-unifier处理。有人会觉得这样影响效率,当然我们也提供自己手动控制连接的方法,只是默认情况下采用自动的方式。
  3、统一的数据库操作类型。在dbking中,所有的数据库数据只有五种数据类型,String、NumberBigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有少数的数据类型不能支持,有些是JDBC驱动的问题,有些是我们出于移植的考虑,有些数据库的数据类型在别的数据库里没有对应的数据类型支持,这样的数据类型只能不予支持,幸好这只是极少的一部分。
  4、简化了很多复杂的数据库操作。比如:数据库分页,你不用再关心记录总数怎么取,不用考虑各种数据库之间的差异,最关键的是绝对的高效。再比如LOB字段的处理,可以直接通过增、删、改、查等接口处理,遇到较大的LOB,也可以用流的方式处理,避免内存溢出的问题。再比如获取数据库序列,我们采用了统一的算法,不同的数据库都使用同一个接口来获取序列,而且这个方法可以在多线程环境下使用,甚至是集群环境下都没有问题。
  5、提供多种使用方式。可以单独使用,也可以结合Spring IoC框架使用。可以通过配置方式指定数据源,也可以通过硬代码方式指定数据源,甚至通过第三方获取数据库连接的方式都是可以的。 目前工具在Oracle 11g、Microsoft SQLServer 2012、MySQL 5.x、DB2 10.x、Sybase 15.x、PostgreSQL 9.x、Derby 10.x上通过了测试。

2、通过生成器创建BO类及DAO层代码
  这是一个配合dbking的代码生成器,生成基于dbking的DAO层类。有了这样类,可以简化开发代码,避免低级的书写错误,使开发者更专注于业务。另外,也可以在此基础上配合一定的代码来防止SQL注入的问题。

3、为各类数据库之间的数据导入导出提供高效率的工具
  异构数据库的导入导出一直是个大难题,一般的工具配置复杂,尤其是不支持LOB这样的大字段数据,我们的这个工具不仅配置简单,而且具有以下几个特点。
  1、速度非常快,这个因为取决于系统环境,这个只有谁用谁知道了,至少我们是跟别的工具作过比较的。
  2、支持LOB字段的导入导出。
  3、自动侦测数据库表的主、从关系,保障数据库的导入不受外键约束的影响。
  4、根据配置可以选择遇到重复数据时的处理方式————忽略或者中止。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧