Postgresql 如何更改Postgres JDBC驱动程序属性以更改计数函数的返回类?

Postgresql 如何更改Postgres JDBC驱动程序属性以更改计数函数的返回类?,postgresql,jdbc,jasper-reports,Postgresql,Jdbc,Jasper Reports,我正在运行Jasper报告(通过jrxml),我正在连接/读取Postgres数据库。 Sql从count函数返回一个值,然后在将该值写入Jasper报告(通过xml)时会导致java.lang.ClassCastException,我是否可以修改JDBC驱动程序属性来处理该值(而不是修改Sql) SQL中导致错误的行为 COALESCE(B.GP_COUNT,0) as GP_COUNT 如果我修改了使用CAST语句填充GP_COUNT的行,那么在xml中就可以了:- CAST(COUNT(

我正在运行Jasper报告(通过jrxml),我正在连接/读取Postgres数据库。 Sql从count函数返回一个值,然后在将该值写入Jasper报告(通过xml)时会导致java.lang.ClassCastException,我是否可以修改JDBC驱动程序属性来处理该值(而不是修改Sql)

SQL中导致错误的行为

COALESCE(B.GP_COUNT,0) as GP_COUNT
如果我修改了使用CAST语句填充GP_COUNT的行,那么在xml中就可以了:-

CAST(COUNT(DISTINCT PD_CDE) AS INT4) AS GP_COUNT 
我正在寻找一种避免对xml和jrxml进行更改的解决方案(因为我们有数百个报告要从DB2转换为Postgres)


感谢您的帮助,我不是java人,因此我提前道歉。

PostgreSQL JDBC驱动程序不返回字符串,而是返回一个
BIGINT
作为
count
聚合函数的结果

此Java代码:

Class.forName(“org.postgresql.Driver”);
java.sql.Connection conn=java.sql.DriverManager.getConnection(
“jdbc:postgresql://127.0.0.1/mydb?user=myuser"
);
java.sql.Statement stmt=conn.createStatement();
java.sql.ResultSet rs=stmt.executeQuery(“从pg_类中选择计数(*));
System.out.println(“计数类型(*)是一个BIGINT:”
+(rs.getMetaData().getColumnType(1)=java.sql.Types.BIGINT)
);
rs.close();
stmt.close();
康涅狄格州关闭();
产生:

Type of count(*) is a BIGINT: true

从DB2到Postgres,我们有很多报告需要修改,因此我们正在寻找一个通用的修复方法(而不是修改大量的XML/jrxml),thankscast在查询中确实修复了它,但是是否有一个“全局”解决方案,我们可以调整驱动程序,使所有的XML都可以工作(而不改变查询),感谢到目前为止的帮助。显示与$F{GP_COUNT}相关的jrxml,什么是类声明?,在注释中,您声明从Long-->Integer转换而来,在问题字符串中,我认为您在字段声明中有Integer,解决方案是将所有这些更改为Long,因为Integer是错误的。这将修复它,但是我们有数百份报告要从DB2到Postgres,我们正在寻找一个能够避免sql和报告更改的高级解决方案(如果可能的话)我认为没有任何驱动程序设置可以更改元数据调用返回的sql类型(这样做似乎也很奇怪),唯一的解决方案是实现您自己的驱动程序;),我会将字段声明改为Long,在计数字段上使用整数是不正确的(因为它可能会溢出),可能是在数据写入报表时失败:-原因:net.sf.jasperreports.engine.fill.jrepressionevalexception:错误计算表达式:源文本:$F{GP_count}原因:java.lang.ClassCastException:java.lang.Long无法在CIRDispensingPracticeNameAddress_1430237118595_540206.evaluate(CIRDispensingPracticeNameAddress_1430237118595_540206:692)在net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:231)处转换为java.lang.Integer。。。84more@MartinG因此,您的字段是java.lang.Integer?,字符串内容从何而来?这是导致错误的命令,COALESCE(B.GP_COUNT,0)作为GP_COUNT,因此我假设字符串值传递到报告中,导致错误error@MartinG用所有这些信息更新你的问题,全部命令,与字段声明相关的完全异常和jrxml。@PetterFriberg元数据表示它返回一个
BIGINT