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.
Sorry, wenn Beschreibung lang ist. Ich würde jede Hilfe sehr schätzen.
Vielen Dank im Voraus!
*** "Frage 5:" *** SO ist eine Q & A-Site, kein Help Desk! Es funktioniert am besten, wenn es eine eindeutige, spezifische Frage pro Thread gibt. –