谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

2007-03-01から1ヶ月間の記事一覧

ストアドプロシージャの戻り値をDTOで取得するには?

ストアドプロシージャの戻り値をDtoで返すためには、 戻り値とDTOのマッピング STRUCTとDTOのマッピング の2段階が必要。 似たような処理をしているのが BeanMetaDataとか、AbstractBeanMetaDataResultSetHandlerとなので、 この辺りを参考にして作れそう。 …

次は戻り値の扱い

ラッパーを作ることで、引数のDTO(STRUCT)、配列(ARRAY)には対応ができた。 次は、戻り値の変換をどうするか。 ストアドプロシージャのreturnやOUTパラメータにSTRUCTやARRAYが入っていると、 Daoの戻り値にも、oracle.sql.STRUCT型や、oracle.sql.ARRAY型の…

引数のSTRUCTやARRAYに対応する方法

S2Daoのストアド呼び出しの引数に、STRUCTやARRAYを使えるようにする改修。 ストアドプロシージャの引数がSTRUCT Dao側のメソッドは、引数をDtoにする ストアドプロシージャの引数がARRAY Dao側のメソッドは、引数をListか配列にする 、、、を実現するための…

STRUCTの詳細はOracleTypeADTを使って取る。

こんなコードを書くと、 StructDescriptor sd = new StructDescriptor("PERSON", conn); OracleTypeADT adt = sd.getOracleTypeADT(); int attrNum = adt.getNumAttrs(); for (int i = 1; i <= attrNum; i++) { String name = adt.getAttributeName(i); Syst…

世界フィギュア

やばい、浅田真央やばい、マジ泣ける。

欲しい!

ナナオのカラーユニバーサルデザイン対応ワイドモニターが欲しい! ちなみに、僕自身、色弱なんですが、 http://www.itmedia.co.jp/news/articles/0703/15/news002.html このページの最初の写真、左右が全く同じ色にしか見えない (^^;; よく「色弱の人にはこ…

DatabaseMetaDataで取れないのは、ARRAYの型名

上のテーブルをよく見れば分かるけど(誰も見ないって!)、 引数や戻り値に配列が使われている所は、 全部「VARRAY」になっていて、その次の行に、配列の型が書いてある。 DatabaseMetaDataでは、、、 VARRAYの型名は取れない VARRAYがどの型で構成されてい…

DatabaseMetaDataでドコまで取れるか、何が取れないのか

昨日のエントリーで、ちょっと嘘ついちゃいました。 ユーザ定義の詳細は、DatabasetMetaDataの別メソッドを使えば、 もうちょっと取れます。 ということで、 DatabaseMetaDataでどんな情報が取れるか見ていこう。 こんなコードを書いてみる。 public class D…

ここまでのまとめ

引数のSTRUCT ORADataのラッパーを使って、DTOをラッピングして渡す。 StructDescriptorを利用する。 戻り値のSTRUCT StructをDtoに変換して返す。 DTOのクラス名の取り方は? 引数のARRAY ORADataのラッパーを使って、ラッピングして渡す。 ArrayDescriptor…

ユーザ定義型に対応したいなら、自前でディクショナリから定義を取ろう。

ということで、自前でOracleのディクショナリから値を取るSQL文。 SELECT * FROM all_arguments WHERE object_name LIKE 'NEW_PERSON' ORDER BY owner, package_name, overload, sequence ;この戻り値を、Javaのロジックで整理してやれば、必要な定義は全部…

ユーザ定義型に対応したいなら、DatabaseMetaDataは、使えません。

昨日のエントリーに書いたようなストアドプロシージャを、 S2DaoのPROCEDUREアノテーションを使って呼び出すと、 どういう問題が発生するのか? こんなDaoを書いてアクセスしてみる。 package examples.dao; import java.util.Map; public interface StoredT…

引数がArrayのストアドプロシージャ

本日最後、引数がArrayのストアドプロシージャ。 これがちょっと面倒くさい。 まずはストアドプロシージャ定義から。 配列で渡されたPersonの名前を結合するだけ。 CREATE OR REPLACE FUNCTION "PERSON_NAME_MERGE" ( USERS in PERSON_ARRAY ) return VARCHA…

戻り値がArrayのストアドプロシージャ

次は、戻り値がArrayのストアドプロシージャ。 やはり公式ドキュメントのOracleコレクションの操作が参考になります。 定義したプロシージャの詳細は省略、気になる人はソースを読んで! CREATE TYPE PERSON_ARRAY AS VARRAY(10) OF PERSON / CREATE OR REPL…

引数がStructのストアドプロシージャ

続いて、引数がStructのストアドプロシージャの扱い方を考える。 PERSON型を渡して、PERSON.NAMEを返すようなプロシージャを定義する。 CREATE OR REPLACE FUNCTION "PERSON_NAME" ( USER in PERSON ) return VARCHAR2 is begin return USER.NAME; end; / こ…

戻り値がStructのストアドプロシージャ

まずはS2Dao云々は置いといて、戻り値がStructのストアドプロシージャの扱い方を考える。 Oracleオブジェクト型の操作を参考に、以下のような定義を作成する。 CREATE TYPE PERSON AS object ( ID NUMBER(5), NAME VARCHAR2(30) ) / CREATE OR REPLACE FUNCT…

s2dao-oracle作成開始。

s2dao-oracleを作成するにあたって、まずは目的を明確にしよう。 ストアドプロシージャ(procedure / function)経由で、ユーザ定義型、ユーザ定義配列を扱えるようにする。 DtoとStruct(java.sql.Struct / oracle.sql.STRUCT)のマッピングを自動的に行なう。 …