2012-03-13 10 views
0

Ques.Iをフォーマットしようとすると、以下のようなクエリが設定されています。すべてのクエリを実行するかどうかを確認する機能が必要です発生する)私はちょうど私のデータベースを適切な状態に維持したい。すべてのクエリまたは何も実行しないでください

con.setAutoCommit(false); 
            String qry = "insert into tblAllotment(Employee_ID,Employee_Name,Area,Building_Name,Flat_Type,Flat_No,Date_Application,Date_Allotment,Admin_Code) values(" + id + ",'" + name[1] + "','" + area + "','" + flat[2] + "','" + flat[1] + "','" + flat[0] + "','" + dte + "','" + date + "'," + uid + ")"; 
            String qry1 = "insert into tblFlat_Report(Flat_No,Area_Code,Employee_ID,Date_Allottment,Admin_Code)values('" + flat[0] + "'," + acode + "," + id + ",'" + date + "'," + uid + ")"; 
            //String qry2="UPDATE tblUser_Report t1 JOIN (SELECT MAX(S_Date) s_date FROM tblUser_Report WHERE Employee_ID = "+id+") t2 ON t1.s_date = t2.s_date SET t1.Status = 'A', t1.S_Date ='"+date+"' WHERE t1.Employee_ID ="+id+""; 
            String qry2 = "insert into tblUser_Report(Employee_ID,Employee_Name,S_Date,Area,Status) values(" + id + ",'" + name[1] + "','" + date + "','" + area + "','A')"; 
            String qry3 = "update tblFlat set Status ='A' where Flat_No='" + flat[0] + "' AND Area_Code=" + acode + " "; 
            String qry4 = "update tblUser set WL_Flag='N' where Employee_ID=" + id + ""; 
            st = con.createStatement(); 
            int i = st.executeUpdate(qry); 
            int j = st.executeUpdate(qry1); 
            int k = st.executeUpdate(qry2); 
            int l = st.executeUpdate(qry3); 
            int m = st.executeUpdate(qry4); 
con.commit(); 

            if (i != 0 & j != 0 & k != 0 & l != 0 & m != 0) { 
             Done = "Data Inserted Successfully...!!!"; 
            } else { 
             System.out.println("Error Occured"); 
            } 
           } catch (SQLException e) { 
con.rollback(); 
            System.out.println(e.getMessage()); 
           } 
    } 

答えて

4

お客様のデータベースはトランザクションを提供する必要があります。 MySQLを使用している場合、MyISAM データベース テーブルを使用することはできません。たとえば、InnoDBデータベースを使用する必要があります。

コードの開始時にトランザクションを開始し、それぞれの結果を確認します。エラーが発生した場合は、ロールバックを発行します。すべてがうまく動いたら、最後にコミットを発行します。

+0

私のデータベースエンジン全体をInnoDBに変換するにはどうすればよいですか? – Shaggy

+0

実際、同じMySQLデータベース内のMyISAMとInnoDBにテーブルを持つことができるので、テーブルごとのテーブルプロセスです。テーブルのエンジンを直接変更すること( "alter table XXXX ENGINE = InnoDB"を使用)を含むいくつかのオプションがありますが、この記事を読むことを強くお勧めしますhttp://dev.mysql.com/doc/refman/5.0/ja/ (あなたのMySQLサーバに依存しているかもしれません) – huelbois

+0

MySQL 5.5と同じドキュメント:http: //dev.mysql.com/doc/refman/5.5/en/converting-tables-to-innodb.html – huelbois

2

はトライキャッチでクエリをラップ)(

con.setAutoCommit(false); // at the beginning, to prevent auto committing at each insert/update/delete 
// ... your updates, with error checking 
con.commit(); // at the end, only if everything went fine. 

エラーの場合は、con.rollbackを呼び出す:

あなたの外観は次のようになります。 tryの開始時にsetAutoCommit(false)を追加し、最後にcommit()を追加し、catchブロックにrollback()を追加します。

try { 
    conn.setAutoCommit(false); 

    // Execute queries 

    conn.commit(); 
} 
catch (SQLException e) { 
    conn.rollback(); 
} 
+0

試しても動作しません – Shaggy

+0

あなたのデータベースは他のユーザーのようにトランザクションをサポートしていますか? – Coder

+0

MySQLデータベースはエンジンが "MyISAM"に設定されています – Shaggy

関連する問題