# DB連携系 共通前提 本資料の練習問題は、複数のプログラミング言語(Java / PHP / C# / Python)で共通して利用できるよう記述されています。使用するデータベース接続の仕組み(JDBC、PDO、ADO.NET、DB-API 2.0準拠のドライバ など)やSQLへのパラメータの指定方法、自動採番された値の取得方法など、言語・環境固有の仕様に基づき、問題文の表現をご使用の環境の仕様に適宜読み替えて進めてください。 この系統の各設問に共通する前提事項をまとめます。各`QuestionXX`の仕様は、この内容を前提として記述しています。 ## データベースへの接続について - 前提として、次の接続情報でアクセスできるデータベースサーバーが、あらかじめ用意されているものとします。 - ホスト:`127.0.0.1` - データベース名:`rezodb` - ユーザー名:`rezouser` - パスワード:`Rezo_0000` - (上記は一例です。実際の環境や使用するデータベース製品に合わせて読み替えてください) - 各設問のプログラムでは、上記のデータベースに接続してSQLを実行したうえで、使用し終えたら必ず接続を切断する処理を実装してください。 - SQL文に値を埋め込む際は、文字列としてそのまま連結するのではなく、パラメータとして値を渡す仕組み(プレースホルダ/バインド変数に相当する仕組み)を使用してください。 ## 部署テーブル(department) 以下の項目を持つ「部署」テーブルが、あらかじめ用意されているものとします。 | カラム名 | 内容 | 型 | | --- | --- | --- | | id_department | 部署ID(主キー。新規登録時は自動的に採番される) | 整数 | | nm_department | 部署名 | 文字列 | 初期データとして、以下の5件が登録されているものとします。 | id_department | nm_department | | --- | --- | | 1 | 営業部 | | 2 | 人事部 | | 3 | 開発部 | | 4 | 東京支店 | | 5 | 大阪支店 | - 部署ID `1`〜`3` の部署には、社員テーブル(`Question06`で使用)の社員が所属しています。社員テーブルは部署IDで部署テーブルを参照しているため、これらの部署を削除しようとするとエラーになります。 - 部署ID `4`・`5` の部署には、所属する社員がいません。削除を扱う設問(`Question05`、`Question08`)では、これらの部署を削除の対象とします。 ## 各設問を実行する際の注意 - 各設問はそれぞれ独立したプログラムとして実装しますが、データベース自体は設問をまたいで共有される永続的なものです。そのため、**各設問を実行する前には、データベースが上記の初期データの状態になっていることを確認してから実行してください**(前の設問で行った登録・更新・削除の内容は、次の設問には引き継がれません)。 - 初期データの状態に戻すには、テーブル作成用SQL(`DB連携系/sql/`配下の `CreateTable-MySQL.sql` または `CreateTable-SQLServer.sql`)を実行し直してください。このSQLはテーブルを削除して作り直すため、自動採番される部署IDも初期状態(次に登録するデータが`6`)に戻ります。 - 登録したデータを削除するだけでは、自動採番される値は元に戻りません。そのため、テーブルを作り直さずに登録を繰り返すと、各設問の実行例よりも大きい部署IDが採番されます。部署IDの数字だけが実行例と異なる場合は、実装の誤りではありません。 - `Question06`でのみ、上記の部署テーブルに加えて「社員テーブル」も使用します。社員テーブルの定義は`Question06`の仕様内で説明します(社員テーブルは、テーブル作成用SQLによって部署テーブルと一緒に作成されます)。