2012-07-24 43 views
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個元組」。

現在我可以插入一個元組到部門這麼說

"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'. 

計數++是while循環,這樣就不會有重複的PK的。

所以我可以創建在學生表10000元組,但我不能在Department表創造超過1元組,因爲CSI不能重複。

但是,如果我不插了部門表中ATLEAST一個元組,然後我失去了外鍵約束。

有什麼想法?

PS。我不是在這裏爲你們只是做代碼只需要一個想法

布蘭登

回答

0

而不必DEPT_NAME作爲primary key的,創造另一列DEPT_ID並將其設置爲一個主鍵。你可以用相同的方式增加它。

此外,可以考慮使用一個PreparedStatement您的SQL更新

作爲一項規則,你FK將指向另一個表的PK。所以,當您創建DEPT_ID作爲主鍵,你也需要修改你的學生架構,以反映這種變化

編輯:根據您的需要,你可以做這樣的事情(雖然我不知道您的具體要求)&假設的上述變化,你可以做這樣的事情

創建PreparedStatement這樣的:

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

既然你知道你的部門的數量,你現在可以創建一個循環插入元組到喲你的部門表,然後使用這些信息插入你的學生表,對吧? (這聽起來更像是一個家庭作業,所以我將它留給你思考的如何做到這一點的一部分

+0

是啊,所以我做到了。但是我只能創建與部門元組一樣多的學生元組。 – 2012-07-24 15:20:23

+0

我已經更新了我的答案。我希望這能幫助你在正確的方向上提供一些指引。 – Sujay 2012-07-24 15:57:27

+0

是的,它是一個編程分配和你的權利,我不希望有太多的信息,我想要做到這一點。我要去試試這個PreparedStatement,然後再看看這個。 – 2012-07-24 16:23:16