2016-08-14 9 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 

は、だから、私はSTORを作成しようと思いましたすべての挿入ステートメントをトランザクションに挿入します。

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回の授業はMANY料を持っているのであれば、私は病気にストアド・プロシージャ内に置くのトランザクションでで次の操作を行う必要があります。

START TRANSACTION; 

ステップ1:挿入1レコードの1.1ステップ

テーブルtuitionへ:SELECT LAST_INSERT_ID() INTO tuition_idVariable

ステップ2:SELECT LAST_INSERT_ID() INTO fees_idVariable

JTable

テーブルfeesにステップ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の)複数の行を挿入する一切の可能な方法はありません場合はまた、それは最高の2つのストアドプロシージャを作成するのですか?

質問3:私はJTablesで作業する場合、私はちょうどデータベースにレコードを格納するために私forループに示しているもののようなストアドプロシージャの反復呼び出しで使用されてしまいました。それは良い練習ですか?より良い、より効率的な方法がありますか?

質問4:データベースにMANYテーブルにすべてのことのレコードを挿入するときにJTablesで作業するにはどうすればよい

質問5:私のテーブルデザインは悪いですか?助言がありますか?

私が作成したGUIは次のとおりです。説明が長いの場合

enter image description here

申し訳ありません。私はどんな助けにも感謝します。

ありがとうございます!

+2

*** "質問5:" *** SO Q&Aサイトがある、ないヘルプデスク!スレッドごとに1つ明確で具体的な質問がある場合に最適です。 –

答えて

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) 
     ; 
関連する問題