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

Counts++ 在 while 循环中,所以没有重复的 PK。

所以我可以在学生表中创建 10000 个元组,但我不能在部门表中创建超过 1 个元组,因为不能复制 CSI。

但是,如果我没有在部门表中插入至少一个元组,那么我将失去外键约束。

有什么想法吗?

PS。我不是在这里让你们只是做代码只需要一个想法

布兰登

4

1 回答 1

0

不要将 dept_name 作为 a 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(?,?,?,?)");

由于您知道您拥有的部门数量,您现在可以创建一个循环将元组插入到您的部门表中,然后使用此信息插入到您的学生表中,对吗?(这听起来更像是一个家庭作业,所以我会让你考虑如何做这部分

于 2012-07-24T15:03:15.177 回答