2016-08-14 5 views
-1

Ich arbeite an einem Projekt, wo ich mehrere JTables verwendet, um Daten zu akzeptieren und anzuzeigen. Ich bin jetzt an einem Punkt, wo ich Datensätze zu 3 verwandten Tabellen einfügen muss.Verschiedene Möglichkeiten oder effiziente Möglichkeiten zum Einfügen von Datensätzen von JTable in Datenbank

Nachhilfe

id PK 
gradelevel_id 
schoolyear_id 

Gebühren

id PK 
title 
amount 
description 
feetype_id 

tuition_fee

id PK 
tuition_id 
fees_id 

Also dachte ich, ich stor schaffen würde ed-Prozedur und lege alle insert-Anweisungen in eine Transaktion. So

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 

wenn hat alle 1 Nachhilfe viele Gebühren, wird sich die folgenden in einer Transaktion tun müssen, die krank innerhalb der gespeicherten Prozedur setzen.

START TRANSACTION; 

Schritt 1: Setzen Sie 1 Datensatz zu tuition Tabelle

Schritt 1.1: SELECT LAST_INSERT_ID() INTO tuition_idVariable

Schritt 2: Legen Sie viele Gebühren von einem JTable-fees Tabelle

Schritt 2.1: SELECT LAST_INSERT_ID() INTO fees_idVariable

Schritt 3: INSERT INTO tuition_fee(tuition_id, fees_id) VALUES(tuition_idVariable, fees_idVariable);

In Schritt 2 muss ich durch jede Zeile der JTable mit den Gebühren durchlaufen, die mich denken ließen, dass es vielleicht einen Weg gibt, JTable Bulk-Datensätze als Parameter an die gespeicherte Prozedur zu übergeben.

Frage 1: Ist das möglich oder muss ich noch eine for-Schleife wie diese erstellen?

for(int i=0; i<Jtable.getRowCount(); i++){ 
    String value = (String) getValueAt(i,columnNumber); 
    classname.createTuition(arguments); 
} 

Frage 2: Auch wenn es keine Möglichkeit gibt mehrere Zeilen (auf Schritt 2) Gebühren ohne iterativen Aufruf auf creatTuition() Methode einzufügen, ist es am besten, zwei gespeicherte Prozeduren zu erstellen?

Frage 3: Als ich mit JTables arbeite ich mit iterativen fordert gespeicherte Prozeduren verwendet wurde gerade wie das, was in meinem for Schleife gezeigt ist Datensätze Datenbank zu speichern. Ist es eine gute Übung? Gibt es bessere und effizientere Wege?

Frage 4: Wie gehen Sie mit JTables funktionieren, wenn alle in der Datenbank es Aufzeichnungen zu einer MANY Tabelle einfügen?

Frage 5: Ist mein Tischdesign schlecht? Irgendwelche Vorschläge?

Hier ist die GUI, die ich erstellt habe.

enter image description here

Sorry, wenn Beschreibung lang ist. Ich würde jede Hilfe sehr schätzen.

Vielen Dank im Voraus!

+2

*** "Frage 5:" *** SO ist eine Q & A-Site, kein Help Desk! Es funktioniert am besten, wenn es eine eindeutige, spezifische Frage pro Thread gibt. –

Antwort

1

Verwenden Sie keine gespeicherte Prozedur. Stattdessen führen Sie die Aufrufe, einschließlich Schleifen, in PHP/Java/VB/etc Code durch.

Sie können bauen (aber nicht in einem SP), eine mehrreihige INSERT:

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