【问题标题】:Creating multiple tuples in multiple tables在多个表中创建多个元组
【发布时间】:2012-07-24 14:48:11
【问题描述】:

我有一个关于使用 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。我不是来给你们写代码的,只是需要一个想法

布兰登

【问题讨论】:

    标签: java mysql jdbc foreign-keys tuples


    【解决方案1】:

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

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

    【讨论】:

    • 是的,所以我做到了。但是我只能创建与部门元组一样多的学生元组。
    • 我已经更新了我的答案。我希望这可以帮助您在正确的方向上提供一些指导。
    • 是的,这是一个编程任务,你的权利我不希望有太多信息我想完成这个。我将尝试这个 PreparedStatement 并进一步研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2020-03-18
    • 2017-11-25
    • 2018-05-20
    • 2020-06-14
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多