管理プログラム作成4
|
今回は、学科テーブルの一覧画面を作成していきたいと思います。今までの一覧画面作成では、ひとつのテーブルの内容を表示するだけでしたが、今回は複数のテーブルをリンクさせて、データを取得する必要があるので、データベースの検索に工夫が必要になります。 |
生徒テーブル |
|
学科マスター |
|
学科テーブル |
ID |
氏名 |
ID |
学科名 |
ID |
学科ID |
生徒ID |
1 |
A |
1 |
福祉 |
1 |
1 |
1 |
2 |
B |
2 |
介護 |
2 |
1 |
3 |
3 |
C |
|
|
3 |
1 |
4 |
4 |
D |
|
|
4 |
2 |
2 |
5 |
E |
|
|
5 |
2 |
5 |
6 |
F |
|
|
6 |
2 |
6 |
前回、学科テーブルの仕組みを簡単に紹介したのですが、学科テーブルの作成には学科マスターと生徒テーブルの関連付けが必要になってきます。
学科テーブルでは、学科マスターのIDや生徒テーブルのIDが登録されているだけなので、一覧画面を作る際に学科テーブルの内容を表示させても、数値が並ぶだけで内容がわかりません。
そこで、学科テーブルの一覧では、学科テーブルの内容から、生徒テーブルの内容と、学科マスターの内容を一緒に取得して、それぞれのテーブルの必要な項目を一緒に表示させることで、一覧データとして機能するようにしていきます。
学科テーブル一覧 |
ID |
学科 |
氏名 |
1 |
福祉 |
A |
2 |
福祉 |
C |
3 |
福祉 |
D |
4 |
介護 |
B |
5 |
介護 |
E |
6 |
介護 |
F |
通常テーブルの内容のみを表示した場合は、上記の学科テーブルのように、数値だけで内容が確認できないのですが、左記のような表示結果であればクラスわけが確認できると思います。
このように表示させる場合は、データを検索するときに、テーブルの結合を行い、学科テーブル、学科マスター、学科テーブルの内容をひとつのデータとして表示できるようにしていきます。 |
では、実際にプログラムの開発に入っていきたいと思います。
まず、検索用の画面を作成していきます。
検索用の画面では、学科を選択できるようにしていきます。
福祉科の生徒だけを表示する場合、介護科の生徒のみを表示する場合、あるいは全生徒を表示させる場合と3種類のパターンで検索出来るようにしていきます。
学科マスターの選択は、学科マスターの一覧を下記の内容で取得します。
これを、選択用の画面で表示させれば、学科マスターの一覧を選択できるようになります。
String sql = "SELECT * FROM study_master";
// クエリーの実行
ResultSet result = statement.executeQuery(sql);
float wspeed = 0;
String buf = "";
while (result.next()){
out.println("<OPTION value='" + result.getString("id") + "'>" + result.getString("study_name") + result.getString("grade_no") + result.getString("group_name") + "</OPTION>");
}
|
|
上のテーブル一覧では、わかり易いように学科のみで説明しているのですが、実際には年度や前期、後期と言った情報も学科テーブルには含まれていて、その内容も検索画面では設定できるようにしています。
それらの設定でデータを検索するのですが、下にテーブルの結合をした状態のデータを取得するための、SQL文を紹介します。
String sql = "SELECT study_table.id, study_table.studymaster_id, study_master.study_name, study_master.grade_no, study_master.group_name, student_table.name, study_table.st_year, study_table.st_term";
sql = sql + " FROM student_table RIGHT JOIN (study_master RIGHT JOIN study_table ON study_master.id = study_table.studymaster_id) ON student_table.id = study_table.student_id"; |
上記のSQLを解説していきますと、まずSELECTの後に表示するための項目を設定しています。
テーブルの結合を行うので、”テーブル名.項目名”と言う形で設定しています。そうしないと、結合するテーブルに同じ項目名がある場合、どちらのデータが必要なのか、特定できなくなるので、テーブルの結合を行う際には、テーブル名を必ず入れるようにします。
次にFROMの後なのですが、”RIGHT JOIN”というのが入力されていますが、これがテーブルの結合を行うキーワードになります。結合にはいくつかの種類があるのですが、今回は”RIGHT JOIN”を使って結合しています。他の結合については、機会があればまた紹介していきたいと思います。
この結合はどういうことをしているかと言うと、学科マスターのIDと学科テーブルの学科IDが同じもの、生徒テーブルのIDと学科テーブルの生徒IDが同じものを取得するようになっています。 |
上記のSQL文で検索をかけることにより、テーブル結合されたデータを取得することが出来るようになり、表示されたデータを見たときに、内容を確認できるようになります。
out.println("<TD><INPUT size='5' type='HIDDEN' maxlength='5' name='id' value='" + result.getString("study_table.id") + "'>" + result.getString("study_table.id") + "</TD>");
out.println("<TD>" + result.getString("study_master.study_name") + "</TD>");
out.println("<TD>" + result.getString("study_master.grade_no") + "</TD>");
out.println("<TD>" + result.getString("study_master.group_name") + "</TD>");
out.println("<TD>" + result.getString("student_table.name") + "</TD>");
out.println("<TD>" + result.getString("study_table.st_year") + "</TD>"); |
検索したデータを表示させるときは、必ず”テーブル名.項目名”という形で指定します。
これはさきほどのSQL文と同じで、結合したテーブルにそれぞれ同じ項目名がある場合に、特定できなくなるのを防ぐためです。 |
これで、学科テーブルの一覧が表示できるようになりました。
今回のポイントは、テーブルの結合に尽きると思います。
リレーショナルデータベースを使ってシステムを構築する場合、テーブルの結合は必須の項目になると思います。
というのも、データを結合させることで、より効率的にデータを構築することが出来るようになるからです。
結合は言葉で説明すると、難しく感じるかもしれませんが、実際にデータベースの構築を行うと必要性を実感すると思います。 |
管理プログラム3 UP JAVABeansを使ったSQL操作 |
|