将记录从JTable插入数据库的不同方式或有效方法

时间:2016-08-14 03:51:29

标签: java mysql jdbc database-design jtable

我正在开展一个项目,在那里我使用了几个JTable来接受和显示数据。我现在处于需要将记录插入3个相关表的位置。

学费

id PK
gradelevel_id 
schoolyear_id

id PK
title
amount
description
feetype_id

tuition_fee

id PK
tuition_id
fees_id

所以我想我创建了一个存储过程并将所有insert语句放在一个事务中。

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步:从JTablefees

插入许多费用

步骤2.1:SELECT LAST_INSERT_ID() INTO fees_idVariable

第3步: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 :在将所有记录插入数据库中的JTables表时,如何使用MANY

问题5:我的桌面设计不好吗?有什么建议吗?

这是我创建的GUI。

enter image description here

很抱歉,描述很冗长。我一定会感激任何帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

不要使用存储过程。而是在PHP / Java / VB / etc代码中进行调用,包括任何循环。

您可以构建(但不在SP中)多行INSERT:

INSERT INTO tuition_fee(tuition_id, fees_id)
      VALUES
      (tuition_idVariable, $fee1),
      (tuition_idVariable, $fee2),
      (tuition_idVariable, $fee3)
      ;
相关问题