Bonjour à tous,
j'ai 3 traitements JAVA qui agissent sur 2 tables:
1)- sélection d'un ensemble de lignes de la table 1 et update du Flag de ces lignes.
2)- création d'enregistrement dans la table 2.
3)- récupération des row_id des lignes créées et mis à jour dans la table 1 des lignes correspondantes.
Je souhaite que mon traitement se fasse de bout en bout et que s'il y a problème que je puisse rollbacker toute la transaction( sachant que je dois commiter dans l'étape 2 pour que je suisse récupérer les row_id).
voici le code,sachant que j'ai anonymisé le code au maximum mais l'idée est là;
j'aimerais avoir votre avis sur ce qui a été fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public class Traitement { protected int etape1(Connection conn)throws SQLException { String req = "requete selection et update"; Statement stmt = conn.createStatement(); int nbUpd = stmt.executeUpdate(req); stmt.close(); return nbUpd; } protected int etape2(Connection conn)throws SQLException { String req = "ma requete d'update"; Statement stmt = conn.createStatement(); int nbInsert = stmt.executeUpdate(req); stmt.close(); return nbInsert; } protected int etape3(Connection conn) throws SQLException { String req = "requete de report des row_id"; Statement stmt = null; try { stmt = conn.createStatement(); int nbUpd = stmt.executeUpdate(req); return nbUpd; } catch (SQLException sqle) { throw sqle; } finally { if(stmt != null) { try { stmt.close(); } catch (SQLException sqle1) { throw sqle1; } } } } public void méthodeDAppel() { Connection conn=null; try { String url = "url de conenction à la base de données"; conn = DriverManager.getConnection(url,"",""); int result1 = etape1(conn); if (result1 > 0) { //Etape 1 int result2 = etape2( conn); // Report de l'identifiant int result3 = etape3(conn); } } catch ( SQLException sqle ) { try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } }
-Structurellement es-ce bon !
-Es-ce que le traitement s’exécute comme une seule unité transactionnelle? si par exemple il y a un lock sur la table1, y aurait-il un problème au niveau de l'étape 3.
Merci par avance.
Partager