我要从数据库中Select sum(price) from talbe获取一些统计数据作为参数传给JasperReport生成报表。为了达到数据本来应该有的精度,所以在数据库中price的数据类型为decimal(20,2)。由于只是简单地从数据库把price,sum出来并不需要进行更进一步的复杂数据处理,所以在实现中我并没有为table写相应该的Pojo和hbm文件。所以在Dao层,我使用Hibernate运行SQL语句将数据检索出来。代码如下:
BigDecimal totalPrice = (BigDecimal) this .getHibernateTemplate().execute( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
MonthCheckTable monthCheckTable = new MonthCheckTable();
List rs = session.createSQLQuery( " select sum(price) from table " ).list();
Number totalPrice = (Number)rs.get( 0 );
if (totalPrice == null ) totalPrice = new BigDecimal( 0.0 );
return new BigDecimal(totalPrice.toString());
}
} );
运行的时候就出现了Maping Excetion,异常栈如下:
org.springframework.orm.hibernate3.HibernateSystemException: No Dialect mapping for JDBC type: 3; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 3
Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 3
出现这个原因是说服务器端的数据类型并不能和Java的BigDecimal数据类型成功映射。
推想只要在Hibernate里把本对应的数据类型成功映射起来就可以成功执行了。
解决案如下:
1、新建一个MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect 并在里面补充注册新的类型映射。如下:
public class MySQLServerDialect extends SQLServerDialect{
public MySQLServerDialect() {
super();
registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
}
}
2、把Hibernate里的Dialect改成我们第一步新建的新的Dialect
<prop key="hibernate.dialect">com.gdnfha.atcs.common.MySQLServerDialect</prop>
经过这两步这后就可以正常使用SqlQuery拿到Sql Server 2005里的decimal类型了。
在SQLServerDialect里的registerHibernateType函数,更详细的用法请看:
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/dialect/Dialect.html#registerHibernateType(int,%20int,%20java.lang.String)
分享到:
相关推荐
Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14....dm_jdbc\Hibernate Dialect&JDBC;.txt dm_jdbc\version.txt
最新达梦数7据库jar包&方言包,maven依赖jar包 DM达梦数据库jdbc-jar包dialect方言jar包
kingbaseV8 hibernate jdbc 驱动
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)
Vertx JDBC 执行器 JDBC Executor 为通过 Vertx 3.0 事件总线访问任何符合 JDBC 的数据源提供了一种快速有效的方法。 与 Executor 的所有交互都应该是原子的,并且尽可能“简短而甜蜜”,以尽量减少对共享(JDBC ...
simplified-dialect-wy-vscode:简化的方言wenyan-lang的vscode插件
#hibernate.dialect org.hibernate.dialect.H2Dialect #hibernate.connection.driver_class org.h2.Driver #hibernate.connection.username sa #hibernate.connection.password #hibernate.connection.url jdbc:h2:...
Sap HaNa 数据库链接 jar包。可自定义Maven坐标 添加到私有库 想不要积分,CSDN 最低要求1积分 #mvn install:install-file -Dfile=C:\work\hanajdbclib\ngdbc...#hibernate.dialect=org.hibernate.dialect.SAPDBDialect
class:oracle.jdbc.driver.OracleDriver url:"jdbc:oracle:thin:@localhost:1521:jbitdb","epet","epet" sqlserver: class:com.microsoft.sqlserver.jdbc.SQLServerDriver url:"jdbc:sqlserver://localhost:1433;...
基于GO语言实现的仿gorm的一个操作SQL数据库的框架源代码
2.2、打开此文件,将“<property name="hibernate.connection.url">jdbc:sqlite:D:/EGSDatabase.egsdata”一行中的数据库文件("D:/EGSDatabase.egsdata")修改为合适的数据库文件。 注:附件包含了...
神通数据库的jdbc驱动jar包,从自己安装的神通数据库中复制出来,亲测可以使用,分享给需要的人 jdbc.driverClassName=com.oscar.Driver jdbc.url=jdbc:oscar://ip:端口/数据库名称 hibernate.dialect=...
注意社区提供的是For Oracle8.1.7的JDBC驱动,如果使用Oracle9,需要更换JDBC驱动。 SQL Server安装 用bbscs6_sqlserver.sql建表 datasource.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver ...
hibernate3dialect
Java连接达梦数据库驱动dm_jdbc: dm_jdbc\...dm_jdbc\Hibernate Dialect&JDBC;.txt dm_jdbc\version.txt 网上的dm的jdbc驱动分太贵了,完全脱离了分享宗旨。我只收1分,评论后,分好像还能挣回去
各类数据库JDBC连接代码 例如:## MySQL #hibernate.dialect org.hibernate.dialect.MySQLDialect #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect #hibernate.dialect org.hibernate.dialect....
SQLAlchemy Dialect for SAP HANA
Flink1.14.4自定义flink-connector-jdbc连接SQLServer和SAP数据库
人大金仓kingbase 驱动jdbc