有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在从事一个项目,在这个项目中,我使用了几个JTable来接受和显示数据。我现在需要在3个相关表中插入记录

学费

id PK
gradelevel_id 
schoolyear_id

费用

id PK
title
amount
description
feetype_id

学费

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:在tuition表中插入1条记录

步骤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:JTables的所有记录插入数据库中的MANY表时,如何处理JTables

问题5:我的桌子设计糟糕吗?有什么建议吗

这是我创建的GUI

enter image description here

抱歉,如果描述太长。我非常感谢你的帮助

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    可以构造(但不能在SP中)多行插入:

    INSERT INTO tuition_fee(tuition_id, fees_id)
          VALUES
          (tuition_idVariable, $fee1),
          (tuition_idVariable, $fee2),
          (tuition_idVariable, $fee3)
          ;