- PR -

iReportでの出力

投稿者投稿内容
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2005-11-16 21:53
http://www.thinkit.co.jp/free/tech/4/3/1.html
を参考にして、iReportでpdfを作成しようとしています。

URLのサンプルはDBにPostgreSQLをつかっているのですが、
Oracleに変更して”レポートの実行(有効な接続を使用)”を
おこなったのですが

1.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_COUNT.getValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<-------------------------------------------------------------> 2.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_PRICE.getValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<-------------------------------------------------------------> 3.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_COUNT.getOldValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<----------------------------------------------------------------> 4.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_PRICE.getOldValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<----------------------------------------------------------------> 5.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_COUNT.getValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<------------------------------------------------------------->

のコンパイルエラーがでます。
このエラーをjavaソース修正してもレポート出力時にテンプレートから、javaソース
吐かせているので、有効となりません。

Oralce上でnumber型を使用した場合に発生するエラーではないかとおもうのですが
使われてる方、このような現象が発生していないでしょうか?

それとも、なにか使い方を間違えているでしょうか?
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2005-11-17 00:00
実際iReport使ったことはないのでなんとも言えませんが
errorから推測して桁数は大丈夫ですか?
oracle
http://www.ss64.com/orasyntax/datatypes.html
postgre
http://www.postgresql.org/docs/current/static/datatype.html#DATATYPE-NUMERIC

項目の型のみで判断ってことはないと思うんですが
出力設定とかないのでしょうかね?
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2005-11-17 09:17
kumaさん、レスどうもありがとうございます。

元のPostgreSQLでは数値型のデータがjavaにIntegerで返され、私がOracleに変えた
ものではDoubleで返されます。
出力設定というのはなくて、jdbcで得られる列の型を設定しているようです。

OracleのNumber型のJavaでの扱いは、DoubleもIntegerにもなるようです。
どういう条件でIntegerになったり、Doubleになったりするのかはわかりません。
調べているのですが、出てきません。

その後、数値型にしぼって簡単なサンプルをつくって試してみましたが、すべて
同様なエラーになります。
Oracle上の定義ではNumber(3)で十分Integerで表現できるような場合でもDouble
になります。

今はテスト段階ですが、実業務でのデータ定義にはDoubleで表現する項目もある
ので、Oracleの数値項目をJavaのIntegerできれば扱えればよいというものでも
ありません。

iReportは結構使われているので、Oracleで使われてるケースもあるとおもうのですが
いかがでしょう?

書き忘れましたがバージョンは
Oracle 10g
iReport 0.5.2
です。

最初の投稿のエラーがわかりづらいので、再度単純な例で出たものをアップします。
1. Cannot cast from Double to String
value = (java.lang.String)(((java.lang.Double)field_NUM.getValue()));
<---------------------------------------------------------->
2. Cannot cast from Double to String
value = (java.lang.String)(((java.lang.Double)field_NUM.getOldValue()));
<------------------------------------------------------------->
3. Cannot cast from Double to String
value = (java.lang.String)(((java.lang.Double)field_NUM.getValue()));
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2005-11-17 11:03
引用:

元のPostgreSQLでは数値型のデータがjavaにIntegerで返され、私がOracleに変えた
ものではDoubleで返されます。
出力設定というのはなくて、jdbcで得られる列の型を設定しているようです。

OracleのNumber型のJavaでの扱いは、DoubleもIntegerにもなるようです。
どういう条件でIntegerになったり、Doubleになったりするのかはわかりません。
調べているのですが、出てきません。


ResultSetから値を取り出す時のメソッド次第かと思うんですが
field_NUM
が、どのようなクラスなのかが良くわかりませんね・・
ResultSetからfield_NUMへのマッピングも自動でされてしまっているのでしょうか?
tnk
会議室デビュー日: 2005/06/10
投稿数: 11
投稿日時: 2005-11-17 11:48
おそらくiReportでは$F{NUM}と書かれていると思うのですが、
対象のテキストフィールドを

$F{num}.toString()

としてみてはいかがでしょうか。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2005-11-17 13:40
kumaさん、TNKさん レスありがとうございます。

field_NUMはJRFillParameterというクラスで帳票に出す等のパラメータを
抽象化したクラスだとおもいます。

>ResultSetからfield_NUMへのマッピングも自動でされてしまっているのでしょうか?
ですね、それに関する設定等はしてないですし、ないようです。
クエリー定義すると自動的に列の型を決まります。
select分で関数かませていじりまわしてみましたがInteger型にはかわってくれません。

>$F{num}.toString()
>
>としてみてはいかがでしょうか。
ヒットですね、
これで私がつくった簡単なサンプルとおりました。
value = (java.lang.String)(((java.lang.Integer)field_NUM.getValue()).toString());
というコードに変わっています。


ですが、最初参考にしていたWebのサンプルででている下のエラーはtoString()
しても消えません。

1.&nbsp;Cannot&nbsp;cast&nbsp;from&nbsp;Double&nbsp;to&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  value&nbsp;=&nbsp;(java.lang.Integer)(((java.lang.Double)field_COUNT.getValue()));

intValue()つけてもIntegerでないので駄目だし、

吐かれたソース、定義の仕方とエラー内容を見てどう表現するかなー
と考えています。

というか、そもそもこういう対処皆さんされて、iReportを使われているのでしょうか?
tnk
会議室デビュー日: 2005/06/10
投稿数: 11
投稿日時: 2005-11-17 14:28
最初のメッセージは、Double型をInteger型にキャストできない
という内容だったので、

> 1.Cannot cast from Double to Integer
> value=(java.lang.Integer)(((java.lang.Double)field_COUNT.getValue()));

toString()と同様に、

new Integer($F{num}.intValue())

ですかね?

もっとスマートな方法があるかもしれませんが。。。

> というか、そもそもこういう対処皆さんされて、iReportを使われているのでしょうか?

データベースでの定義で自動的に型が決まるみたいだったので、
こういう対処をしました。

# ほとんどtoString()をつけるだけでしたけど。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2005-11-17 15:13
TNKさん ピンゴです。

なんですが、1ページ件数5件の定義で8件だすと、同じページに上書きされて
しまいます。

>もっとスマートな方法があるかもしれませんが。。。

>> というか、そもそもこういう対処皆さんされて、iReportを使われているのでしょうか?

iReportの使い方ではなくてJasperReportの使い方としてはこうなるのかなーとおもいます。
TNKさんはテンプレート定義の方法やJasperReportのクラスなども結構調べて利用されて
るのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)