- PR -

DBの項目に関するクラスに対する実データのクラスの作り方について

1
投稿者投稿内容
hakuzin
会議室デビュー日: 2004/12/06
投稿数: 3
投稿日時: 2005-06-19 16:29
始めまして、申し訳ないですがどなたかお力をお貸しください。

現在DBに複数の定数が登録されておりそれぞれのテーブルに対しての参照、登録などを1種類のプログラムで行おうとしています。言い方が難しいですが、どの定数であろうと同じソースを用いてDBへのアクセスを行うと言った感じでしょうか。

現在のところ定数の設定自体はXMLに記述しておりそれを読み込んでインスタンスを作成しており、コードは

定数
public class ConstantBean{

/**
* 定数の持つデータを保持
*/
private ArrayList dataList = null;

private String constantName = "";
private String constantDBName = "";
private int numOfCol = 0;
private int useableUserType = -1;

/**
* コンストラクタ
* @return
*/
public ConstantBean(){
dataList = new ArrayList();
}

public void add(ConstantDataBean cdb){
dataList.add(cdb);
numOfCol++;
}

public List getDataList(){ return dataList; }

//private宣言されている別の変数のセッタ、ゲッタは省略

}

これが定数テーブルについてのクラスで、それぞれのデータ項目は
データ項目クラスを用いて

public class ConstantDataBean{

private String dataName = "";
private String dataDBName = "";
private String dataType= "";
private String anotherTblDBName = "";
private String anotherTblDataDBName = "";
private int numOfByte = -1;
private boolean editable = false;
private boolean pKey = false;
private boolean completely = false;
private boolean referAnotherTbl = false;
  //セッタゲッタは省略
}

のようになっています。
そして、実際に検索を行ったり一覧表示をするためのクラスを作成しなければならないと思うのですがクラスをどのように作成すればいいのか見当がつきません。
定数データクラスの規則に則っているかをチェックする必要があるため定数データクラスとなんらかの関係を持つ必要があるとは思うのですがどうすればいいのか。
また、それぞれの項目がばらばらでは困るのでこれらをCollectionインタフェースを実装したクラスを用いて管理をする必要があると思うのですが検索結果を表示する場合にはこのコレクションのコレクションを作らなければならないのか?
と考えてしまいわけがわからなくなってしまっています。

乱筆乱文申し訳ありませんが、力を貸してください。お願いします

Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-06-20 06:25
どういうメソッドでクライアントがこのプログラムを利用しようと考えていますか?
mone
常連さん
会議室デビュー日: 2005/05/18
投稿数: 37
投稿日時: 2005-06-20 13:13
こんにちは、moneです。

引用:

現在DBに複数の定数が登録されておりそれぞれのテーブルに対しての参照、登録などを1種類のプログラムで行おうとしています。言い方が難しいですが、どの定数であろうと同じソースを用いてDBへのアクセスを行うと言った感じでしょうか。

現在のところ定数の設定自体はXMLに記述しておりそれを読み込んでインスタンスを作成しており、コードは


この部分が理解できません。
無理やり読んで

対象のDBには複数のテーブルがあり
それぞれのテーブルにはコードが割り振られている。
XMLの設定ファイルからコードを読み込み、
参照するテーブルを判断して
データを取得してくる。

と理解しましたが、
認識は正しいでしょうか?

引用:

そして、実際に検索を行ったり一覧表示をするためのクラスを作成しなければならないと思うのですがクラスをどのように作成すればいいのか見当がつきません。
定数データクラスの規則に則っているかをチェックする必要があるため定数データクラスとなんらかの関係を持つ必要があるとは思うのですがどうすればいいのか。
また、それぞれの項目がばらばらでは困るのでこれらをCollectionインタフェースを実装したクラスを用いて管理をする必要があると思うのですが検索結果を表示する場合にはこのコレクションのコレクションを作らなければならないのか?
と考えてしまいわけがわからなくなってしまっています。


検索を行ったり一覧表示を行うクラスとありますが
どのように実現しようとしているのか全く見えません。
検索をクラスで行うということは、

SQL文で取得してくる際に条件指定せず全件取得し、
そのデータを内部で抽出するということですか?

また、一覧表示するクラスとは・・・
Javaを使っているのですから
JSPを使うことになりますよね、きっと。
その場合はデータビーンとして取得したデータを
渡してあげれば一覧表示は可能かと。

作ろうとしているシステム全体の見通しが
ご自身にも明確に見えていないのではないかと思います。
もし、そのような状態ならば
いきなりコーディングを始めてしまうのは危険かと。。。
設計はどの程度できているのでしょうか?
hakuzin
会議室デビュー日: 2004/12/06
投稿数: 3
投稿日時: 2005-06-20 14:39
すいません。自分でも後々見直したら意味わからなくなってました。

引用:
対象のDBには複数のテーブルがあり
それぞれのテーブルにはコードが割り振られている。
XMLの設定ファイルからコードを読み込み、
参照するテーブルを判断して
データを取得してくる。

と理解しましたが、
認識は正しいでしょうか?



わけのわからない日本語を直していただいてありがとうございます。
moneさんのおっしゃっている事でほぼ正しいですが自分でもう一度記述します。
文としてうまく書けそうに無いので箇条書きですが…


  • 複数のDBのテーブルに対して照会、変更、削除などができるWebアプリケーションを作成したい
  • それぞれのテーブルの情報はXMLに対して記述してある(論理名、実体名、項目数、etc...)
  • モデルはMVCを用いた4層アーキテクチャ(クライアント、WEB、EJB、EIS)
  • クライアント側から要求があった場合、要求されたテーブルの設定ファイル(上述のXMLファイル)を読みに行き、インスタンス化する(最初の投稿にあるBeanを作成する)
  • そのインスタンスを利用してクライアントに値入力用の画面を出力する(普通の複数の項目数のテキストボックスがありそこに入力してもらう:項目数はテーブルにより可変)
  • クライアント側で入力された情報をBeanにつめてEJBを呼び出す
  • EJB側でDB操作する
  • 結果をクライアント側に表示する

といった形です。
後半の方がすごい適当に書いてありますが、『クライアント側で入力された情報をBeanにつめてEJBを呼び出す』のクライアント側で入力された値をBeanにつめるの部分のBeanクラスをどのような形で定義するかを悩んでいる状態です。
項目数は可変ですし設定ファイルを元にしたクラスにある条件に対してチェックを行わなきゃならない(文字数や、文字型など)し…と考えてしまってよくわからなくなっています。
引用:

設計はどの程度できているのでしょうか?


これに関しては言いにくいのですが、設計しながらコーディングが始まっている状態です。
実際きちんと設計しなければコーディングすべきでないのは重々承知なのですが、よんどころのない事情によりこのような形になってしまっています。
一応この質問事項の部分に関するところはコーディングはしておらず、現在は画面と画面設定用Beanや画面表示用Servletの作成までに留めています。

この回答でAnthyhimeさんの質問に対する回答になったでしょうか。
よろしくお願いします
mone
常連さん
会議室デビュー日: 2005/05/18
投稿数: 37
投稿日時: 2005-06-20 16:49
こんにちは、moneです。
引用:

後半の方がすごい適当に書いてありますが、『クライアント側で入力された情報をBeanにつめてEJBを呼び出す』のクライアント側で入力された値をBeanにつめるの部分のBeanクラスをどのような形で定義するかを悩んでいる状態です。
項目数は可変ですし設定ファイルを元にしたクラスにある条件に対してチェックを行わなきゃならない(文字数や、文字型など)し…と考えてしまってよくわからなくなっています。



スマートかどうかはわかりませんが、以下の方法で可能かと。

データビーン
List テーブル情報リスト
List 取得データリスト
#テーブル情報リストには下記テーブル情報をaddしていく。
#データ情報にはSQLから取得したものを順にaddしたListを格納

テーブル情報クラス
String 列名
データ形式(String or int??)
int 文字数


形式チェッククラス
テーブル情報を受け取り、
該当形式のチェックメソッドに渡す

JSP部分
データビーンを取得
テーブル等に順に出力していく。
ヘッダ部分に列名を出力
二重ループでデータ部分を表示

ソートしたい場合はhashMapでも使えばよいかな?

と、適当に書きましたが
自分が作るんだったら、というものです。
データ量が多いならば、
SQL文で取得する際に何件目から何件目まで取得というように
抽出してきますね。
ご参考になれば幸いです。
hakuzin
会議室デビュー日: 2004/12/06
投稿数: 3
投稿日時: 2005-06-28 18:55
moneさん

申し訳ございません。返答が遅れました。
moneさんに教えて頂いた構成とほとんど同じように作成してやってみたところ、うまく取得する事ができました。

ありがとうございました。
1

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