2016-08-14 50 views
-1

我正在使用幾個JTable接受和顯示數據的項目。我現在需要將記錄插入3個相關表格。從JTable到數據庫插入記錄的不同方式或有效方法

學費

id PK 
gradelevel_id 
schoolyear_id 

id PK 
title 
amount 
description 
feetype_id 

tuition_fee

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:SELECT LAST_INSERT_ID() INTO fees_idVariable

:從 JTablefees

步驟2.1插入許多費用

步驟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:在數據庫中插入所有它的記錄到MANY表時JTables你怎麼工作?

問題5:我的桌子設計不好嗎?有什麼建議麼?

這是我創建的GUI。

enter image description here

很抱歉,如果說明是漫長的。我會很感激任何幫助。

在此先感謝!

+2

*** 「問題5:」 *** SO是一個Q&A網站,而不是幫助臺!當每個線程有一個明確的,具體的問題時,效果最好。 –

回答

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) 
     ; 
相關問題