【发布时间】:2016-12-20 16:59:15
【问题描述】:
我正在做一个项目,我使用了几个 JTable 来接受和显示数据。我现在需要将记录插入到 3 个相关表中。
学费
id PK
gradelevel_id
schoolyear_id
费用
id PK
title
amount
description
feetype_id
学费
id PK
tuition_id
fees_id
所以我想我会创建一个存储过程并将所有插入语句放在一个事务中。
CREATE DEFINER=`root`@`localhost` PROCEDURE `createTuition`(aFeeTitle VARCHAR(100),aFeeAmount DECIMAL, aFeeDescription TEXT, aFeeTypeId INT, aGradeLevelId INT, aSchoolYearId INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK; RESIGNAL;
END;
DECLARE tuition_idVariable INT;
DECLARE fees_idVariable INT;
START TRANSACTION;
-- INSERT statement 1
INSERT INTO tuition(gradelevel_id,schoolyear_id)
VALUES(aGradeLevelId, aSchoolYearId);
SELECT LAST_INSERT_ID() INTO tuition_idVariable;
-- INSERT statement 2
-- this insert on `fees` I'm not sure if I can put within the transaction -- together with the insert on tuition table because I will need to do an -- iterated call on this procedure to get the records on JTable
INSERT INTO fees(title,amount,description,feetype_id)
VALUES(aFeeTitle,aFeeAmount,aFeeDescription,aFeeTypeId);
SELECT LAST_INSERT_ID() INTO fees_idVariable;
-- INSERT statement 3
INSERT INTO tuition_fee(tuition_id,fees_id)
VALUES(tuition_idVariable,fees_idVariable);
COMMIT;
END
因此,如果每 1 次学费都有很多费用,我需要在不正确放入存储过程的事务中执行以下操作。
START TRANSACTION;
第 1 步:将 1 条记录插入到tuition 表中
步骤 1.1:SELECT LAST_INSERT_ID() INTO tuition_idVariable
第 2 步:将许多费用从 JTable 插入到 fees 表
步骤 2.1:SELECT LAST_INSERT_ID() INTO fees_idVariable
第三步:INSERT INTO tuition_fee(tuition_id, fees_id) VALUES(tuition_idVariable, fees_idVariable);
在第 2 步中,我必须遍历包含费用的 JTable 的每一行,这让我认为也许有一种可能的方法将 JTable 批量记录作为参数传递给存储过程。
问题 1:这可能吗,还是我还需要像这样创建一个 for 循环?
for(int i=0; i<Jtable.getRowCount(); i++){
String value = (String) getValueAt(i,columnNumber);
classname.createTuition(arguments);
}
问题 2:另外,如果没有可能在不迭代调用 creatTuition() 方法的情况下向费用中插入多行(在步骤 2 中),最好创建两个存储过程吗?
问题 3: 当我使用 JTables 时,我习惯了对存储过程的迭代调用,就像在我的 for 循环中显示的那样,将记录存储到数据库中。这是一个好习惯吗?有没有更好更有效的方法?
问题 4:在将所有记录插入数据库中的 MANY 表时,如何使用 JTables?
问题 5: 我的桌子设计不好吗?有什么建议吗?
这是我创建的 GUI。
如果描述冗长,请见谅。如果有任何帮助,我将不胜感激。
提前致谢!
【问题讨论】:
-
“问题 5:” SO 是一个问答网站,而不是帮助台!当每个主题有一个明确、具体的问题时,它的效果最好。
标签: java mysql jdbc database-design jtable