0

Java を使用して複数のテーブルに複数のタプルを作成することについて質問があります。

これが私のテーブルです。

create table department(

dept_name       varchar(20) primary key, 
building        varchar(15), 
budget      numeric(12,2)
);

create table student
(ID             int, 
 name           varchar(20) not null, 
 dept_name      varchar(20), 
 tot_cred       numeric(10,0),
 primary key (ID),
 foreign key (dept_name) references department(dept_name)
);

そして、私が達成しようとしているのは、Javaプログラムがユーザーにプロンプ​​トを表示することです

「部門テーブルにはいくつのタプルが必要ですか?」ユーザー: 1000。「Department テーブルに 1000 個のタプルが作成されました。」

「学生テーブルにはいくつのタプルが必要ですか?」ユーザー: 500. "学生テーブルに 500 個のタプルが作成されました。"

これで、部門に 1 つのタプルを挿入できるようになりました。

"Insert into department ('CSI', 'TownHall', '120000')";

次に、ここから私は

 Insert into student (id, name, dept_name,tot_cred)
             select '"+counts+"', 'Student"+counts+"', dept_name, '10' 
             from department      
             where    dept_name='CSI'.

Counts++ は while ループ内にあるため、重複する PK はありません。

したがって、学生テーブルには 10000 個のタプルを作成できますが、CSI は複製できないため、Department テーブルに複数のタプルを作成することはできません。

しかし、部門テーブルに少なくとも 1 つのタプルを挿入しないと、外部キー制約が失われます。

何かご意見は?

PS。私はあなたたちがコードを実行するためだけにここにいるわけではありません。アイデアが必要なだけです。

ブランドン

4

1 に答える 1

0

dept_nameをとして使用する代わりに、primary key別の列DEPT_IDを作成して主キーとして設定します。同じ方法でそれを増やすことができます。

また、SQLの更新にPreparedStatementを使用することを検討してください

原則として、FKは別のテーブルのPKを指します。したがって、主キーとしてDEPT_IDを作成した場合は、この変更を反映するように学生スキーマも変更する必要があります。

編集:あなたの要件に基づいて、あなたはこのようなことをすることができます(私はあなたの正確な要件を知りませんが)そして前述の変更を仮定すると、あなたはこのようなことをすることができます

PreparedStatement次のように作成します。

PreparedStatement pstmt = con.prepareStatement(INSERT INTO student(id, name, dept_id,tot_cred) values(?,?,?,?)");

自分が持っている部門の数がわかっているので、ループを作成してタプルを部門テーブルに挿入し、この情報を使用して学生テーブルに挿入することができます。(これは宿題のように聞こえるので、この部分の方法を考えるのはあなたに任せます

于 2012-07-24T15:03:15.177 に答える