- - PR -
iReportでの出力
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-16 21:53
http://www.thinkit.co.jp/free/tech/4/3/1.html
を参考にして、iReportでpdfを作成しようとしています。 URLのサンプルはDBにPostgreSQLをつかっているのですが、 Oracleに変更して”レポートの実行(有効な接続を使用)”を おこなったのですが 1. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_COUNT.getValue())); <-------------------------------------------------------------> 2. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_PRICE.getValue())); <-------------------------------------------------------------> 3. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_COUNT.getOldValue())); <----------------------------------------------------------------> 4. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_PRICE.getOldValue())); <----------------------------------------------------------------> 5. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_COUNT.getValue())); <-------------------------------------------------------------> のコンパイルエラーがでます。 このエラーをjavaソース修正してもレポート出力時にテンプレートから、javaソース 吐かせているので、有効となりません。 Oralce上でnumber型を使用した場合に発生するエラーではないかとおもうのですが 使われてる方、このような現象が発生していないでしょうか? それとも、なにか使い方を間違えているでしょうか? | ||||
|
投稿日時: 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 項目の型のみで判断ってことはないと思うんですが 出力設定とかないのでしょうかね? | ||||
|
投稿日時: 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())); | ||||
|
投稿日時: 2005-11-17 11:03
ResultSetから値を取り出す時のメソッド次第かと思うんですが field_NUM が、どのようなクラスなのかが良くわかりませんね・・ ResultSetからfield_NUMへのマッピングも自動でされてしまっているのでしょうか? | ||||
|
投稿日時: 2005-11-17 11:48
おそらくiReportでは$F{NUM}と書かれていると思うのですが、
対象のテキストフィールドを $F{num}.toString() としてみてはいかがでしょうか。 | ||||
|
投稿日時: 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. Cannot cast from Double to Integer value = (java.lang.Integer)(((java.lang.Double)field_COUNT.getValue())); intValue()つけてもIntegerでないので駄目だし、 吐かれたソース、定義の仕方とエラー内容を見てどう表現するかなー と考えています。 というか、そもそもこういう対処皆さんされて、iReportを使われているのでしょうか? | ||||
|
投稿日時: 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()をつけるだけでしたけど。 | ||||
|
投稿日時: 2005-11-17 15:13
TNKさん ピンゴです。
なんですが、1ページ件数5件の定義で8件だすと、同じページに上書きされて しまいます。 >もっとスマートな方法があるかもしれませんが。。。 >> というか、そもそもこういう対処皆さんされて、iReportを使われているのでしょうか? iReportの使い方ではなくてJasperReportの使い方としてはこうなるのかなーとおもいます。 TNKさんはテンプレート定義の方法やJasperReportのクラスなども結構調べて利用されて るのでしょうか? |