2017-06-20 4 views
-2

私はJasperレポート(jrxml経由)を実行しています。私はPostgresデータベースから接続しています。 Sqlはcount関数から値を返します。これにより、この値をJasperレポートに書き込むとき(java.lang.ClassCastException)、(SQLを修正するのではなく)これを処理するJDBCドライバのプロパティを修正できますか? 。エラーは、私がCASTステートメントを使用してGP_COUNTを移入ラインを修正した場合、これはXMLでOK働くPostgres JDBCドライバのプロパティを変更してカウント関数のリターンクラスを変更する方法はありますか?

COALESCE(B.GP_COUNT,0) as GP_COUNT 

た原因SQLで

ライン: -

私はxmlの& jrxmlの変更を避けるソリューションを探しています(DB2からPostgresに変換するための何百ものレポートがあります)

任意のhel私はJavaの人ではないので、事前にお詫び申し上げます。

+0

我々はDB2からのPostgresに改正するレポートがたくさんあるので、一般的な修正を探して(というよりもXMLSの多くを修正して/ jrxmlの)ありがとう –

+0

クエリのキャストはそれを修正しますが、これまでのヘルプのおかげで、(クエリを変更せずに)すべてのxmlが動作するようにするドライバを調整できる "グローバル"ソリューションがあります。 –

+1

$ F {GP_COUNT}に関連するjrxmlを表示する、クラス宣言とは何ですか?コメントでLong - > Integerからのキャスト、問題の文字列、フィールド宣言にIntegerがあると思います。 Integerが間違っているためLongに変換します。 –

答えて

1

count集計関数の結果として文字列を返しますが、BIGINTを返します。

この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("SELECT count(*) FROM pg_class"); 
System.out.println("Type of count(*) is a BIGINT: " 
       + (rs.getMetaData().getColumnType(1) == java.sql.Types.BIGINT) 
       ); 
rs.close(); 
stmt.close(); 
conn.close(); 

は生成します。

Type of count(*) is a BIGINT: true 
+0

おそらく、データが失敗した場合にレポートに書き込まれます: - 原因:net.sf.jasperreports.engine.fill.JRExpressionEvalException:エラーの評価エラー: \tソーステキスト:$ F {GP_COUNT} \t 原因:ja va.lang.ClassCastException:net.sf.jasperreports.engine.fill.JREvaluator.evaluateで \t(JREvaluator:java.lang.LongのはCIRDispensingPracticeNameAddress_1430237118595_540206.evaluate(692 CIRDispensingPracticeNameAddress_1430237118595_540206)でjava.lang.Integerの \tにキャストすることはできません。 java:231) \t ... 84 more –

+1

@MartinGので、あなたのフィールドはjava.lang.Integerですか?文字列はどこから来たのですか? –

+0

これは、エラーを引き起こしたコマンド、COALESCE(B。GP_COUNT、0)をGP_COUNTとして扱いました。そのため、文字列値がエラーの原因となったレポートにpassignされていると仮定しました。 –

関連する問題