* Javaのメソッドの呼び出しが出来ない [#b20f80c6]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|T.Asa|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(低,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2007-09-04 03:10:39 (火)|
 |~OS|Windows XP|
 |~依存するページ||
 |~バージョン|#listbox3(2.2.1,faq03,version)|
 
 ** メッセージ [#f621b956]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 HSQLDBのページに,SELECT文の中などでjavaの静的メソッドを呼び出せるとかかれており実際に,~
 SELECT "java.lang.Math.sqrt"(2.0) AS "TEST1"~
 FROM "PART" AS "PART"~
 等とすると,java.lang.Mathの関数が使えるようだったので,今度は次のようなクラスを自分で用意して,使えるか試しているのですが...~
 ~
 
  // asa.java
  class asa{
      public static int format(int data) {
          return (data + 1);
      }
  }
 
 ~
 このjavaファイルを(コンパイルして)入れたフォルダをクラスパスに登録しても,このクラスのメソッドが使えません.~
 何が間違っているのでしょうか.
 
 ----
 ***面白いですね [#sc158094]
 >M.Kamataki (2007-09-04 11:43:21 (火))~
 ~
  SELECT "java.lang.Math.sqrt"(2.0)〜
 は動作しますね。~
 ~
 さて、問題を切り分けるために以下のことを試してみてはどうでしょうか。~
 +OpenOffice.orgに登録するクラスパスではなく、Java規定のクラスパス InstallFolder\lib\ext へ置くとどうか。~
 +HSQLDBをネイティブで動かしてみた場合はどうか~
 <~
 >~
 2.ですが、以下のサイトなどが参考になります。~
 http://www.wakhok.ac.jp/~tomoharu/db2004/hsqldb/~
 http://www50.tok2.com/home/oppama/hsqldb-start.html~
 ~
 また、OpenOffice.org内のHSQLDBのjarファイルは、OpenOffice.orgの InstallFolder\program\classes にあります。~
 
 //
 ***コンパイルがうまくいってないみたい. [#k473caf1]
 >T.Asa (2007-09-04 13:10:29 (火))~
 ~
 いろいろ調べて,どうもjdkの登録がうまくいっていなくて,私の環境ではjavaのプログラムのコンパイルがうまくいってないみたいです.~
 
 //
 ***JDKを全部削除して入れ直すとできるようになったようです. [#n021373e]
 >T.Asa (2007-09-04 13:31:50 (火))~
 ~
 classはpublic class asaにする必要がありました.~
 以前に,JDKを新しいバージョンから順に複数インストールしてしまっていました.~
 一旦全てのJDKを削除して1つのバージョンだけを入れ直すとそのバージョンでコンパイルされた物は使えるようになりました.~
 M.Kamatakiさんありがとうございました.~
 
 //
 ***もう一度 詳しく教えてください [#w926d969]
 >imaicom23 (2010-11-21 16:44:57 (日))~
 ~
 JAVAで以下のような内容のファイルをファイル名「UDFTestJava.java」で作成し、コンパイルまではしました。~
 ~
 public class UDFTestJava {~
 ~
 public static int add (int a, int b) {~
 int c = a + b;~
 return c;~
 }~
 ~
 } ~
 ~
 そして、Openoffice.org Baseクエリから~
 ~
 SELECT "UDFTestJava.add"("f1","f2") FROM "t1"~
 ~
 みたいな感じで、使いたいですが、これではだめみたいで、「データ内容が読み込めませんでした。」と、エラーになってしまいます。~
 ~
 あと何か必要なことがあるでしょうか?~
 ~
 上の投稿では、「jdkの登録がうまくいっていな」かったようですが、登録がうまくいっているかどうかどうしたら確認できるでしょうか?もう一度 詳しく教えていただけないでしょうか?~
 
 //
 ***Re: もう一度 詳しく教えてください [#vcb09cc3]
 >M.Kamataki (2010-11-22 11:23:46 (月))~
 ~
 JDKをインストールすると同梱されているJREもインストールされますよね。インストール済みのJREをアンインストールしてみたらどうでしょうか。~
 ~
 そして作成された「〜.jar」というファイルが、OpenOffice.orgが認識するクラスパスで示すフォルダに置かれているかどうか確認してください。~
 ~
 上述した「Java規定のクラスパス」は、OpenOffice.orgの「Javaオプション」画面の設定より優先されます。「Java規定のクラスパス」に「〜.jar」を置くというのが、最も間違いがないと思います。~
 ~
 OpenOffice.orgの「Javaオプション」画面は、メニューの「ツール」-「オプション」で表示されたダイアログの「OpenOffice.org」-「Java」をたどります。OpenOffice.orgで設定するクラスパスはこの画面で「クラスパス」ボタンをクリックして設定します。~
 ~
 また、この「Javaオプション」画面で、複数のJREがインストールされているかどうかもわかります。複数表示された場合は、JDK同梱のJREを残して他はアンインストールしてみましょう。~
 ~
 なお、こちらの質問をされたT.Asaさんの回答はたぶんのぞみが薄いと思います。~
 
 //
 ***「〜.jar」? [#x78084d7]
 >imaicom23 (2010-11-22 20:46:57 (月))~
 ~
 初心者で申し訳ないですが、もしかすると、自作クラスって、「〜.jar」形式にしないとOpenOffice.orgで使えないのでしょうか?~
 「jar」で検索したら、「jar」形式にする方法があったので、試してみます。~
 
 //
 ***JREアンインストールしてみました [#e2602ccf]
 >imaicom23 (2010-11-22 21:08:58 (月))~
 ~
 JREアンインストールしてみました~
 クラスパスも大丈夫と思いますが…~
 「jar」形式にしてためしてみました~
 やっぱり以下のエラーが出ます~
 ~
 SQL ステータス: S1000~
 エラーコード: -33~
 ~
 Access is denied: UDFTestJava.add in statement [SELECT "UDFTestJava.add"("f1","f2") FROM "t1"]~
 ~
 このステートメントおかしいでしょうか?~
 念のためJavaファイルも添付します~
 おかしいところがあるようでしたら 教えてください~
 
 //
 ***クラスパス設定状態 [#i3fd123d]
 >imaicom23 (2010-11-22 21:25:41 (月))~
 ~
 あと、クラスパス設定状態も添付します~
 おかしいところありましたら、教えてください~
 
 //
 ***Re: 「〜.jar」? [#e35ef560]
 >M.Kamataki (2010-11-23 11:29:55 (火))~
 ~
 「〜.jar」ファイルもアップしてください。~
 
 //
 ***jarファイル アップしました [#a1ebbd72]
 >imaicom23 (2010-11-23 12:20:36 (火))~
 ~
 jarファイル アップしました~
 よろしくお願いします~
 
 //
 ***サンプルは動作しませんね [#o9c948e3]
 >M.Kamataki (2010-11-25 00:21:21 (木))~
 ~
 原因はわからないのですが、サンプルは動作しませんね。~
 ~
 以下のサイトを見ても、「Javaのクラスに定義した静的メソッドをHSQLDBのクエリから呼び出して使うことができます。」とありますから、ユーザー定義関数の作成方法としては間違っていないとは思います。~
 ~
 http://lumber-mill.co.jp/gallery/view/tips/java/hsqldb#p12~
 ~
 ちなみにエイリアスを登録しても「Access is denied: UDFTestJava.add in statement〜」エラーになるので、作成したUDFTestJava.jarファイルは認識されていないようです。~
 ~
 >「jar」で検索したら、「jar」形式にする方法があったので、試してみます。~
 ~
 どちらを参考にされましたか? もしかするとjarファイルの作成方法に問題があるのかもしれません。以下を参考に「実行可能なJARファイル」にしてみるとか、試してみてください。~
 ~
 http://www.fk.urban.ne.jp/home/kishida/kouza/old/javajar.html~
 ~
 HSQLDBはJavaで実装されているデータベースなので、そのソースにJavaコードを加える方法でユーザー定義関数を加える方法もあるようです。以下のような解説ページもありました。~
 ~
 オレオレSQL関数の作り方〜HSQLDB編〜~
 http://d.hatena.ne.jp/wyukawa/20080815/1218824824~
 
 //
 ***検証に感謝します [#m3796ed3]
 >imaicom23 (2010-11-26 13:10:47 (金))~
 ~
 早速検証してくださり、感謝いたします。~
 「jar」ファイルは、紹介されているのと同じサイトを参考にしました。~
 「オレオレSQL関数…」も見ましたが、「ソース」というのはどのファイルのことか分からなかったのですが、どのこにあるんでしょうか?~
 いずれにしても、ファイルの作り方が悪いようですので、JAVA勉強しなおして、うまくいきましたら報告します。~
 
 //
 ***ソース [#g08074bc]
 >M.Kamataki (2010-11-26 14:48:47 (金))~
 ~
 HSQLDBのソースは、Baseと同じバージョンのものは例えば以下にあります。~
 ~
 http://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_1_8_0/~
 
 //
 #article