Bonjour,
J'ai un process utilisant JDBC qui connecte au serveur Sybase pour l'extraction des données. De temps en temps (pas souvent) j'ai cette erreur
Je souhaite de ré-exécuter cette commande SQL x fois (x est un paramètre indiquant le nombre d'exécutions si la commande SQL rencontre cette erreur) mais je ne trouve pas une solution satisfaisant
jvm 1 | 2009/08/24 21:51:17.168 | com.sybase.jdbc3.jdbc.SybSQLException: Your server command (family id #0, process id #201) encountered a deadlock situation. Please re-run your command.
INFO | jvm 1 | 2009/08/24 21:51:17.168 |
INFO | jvm 1 | 2009/08/24 21:51:17.168 | at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
INFO | jvm 1 | 2009/08/24 21:51:17.168 | at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
INFO | jvm 1 | 2009/08/24 21:51:17.168 | at com.sybase.jdbc3.tds.TdsResultSet.nextResult(Unknown Source)
INFO | jvm 1 | 2009/08/24 21:51:17.168 | at com.sybase.jdbc3.tds.TdsResultSet.next(Unknown Source)
INFO | jvm 1 | 2009/08/24 21:51:17.168 | at com.sybase.jdbc3.jdbc.SybResultSet.next(Unknown Source)
.
Fonction pour extraire les données
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 public static Object getObjectFromDb(final Connection connection, String storedProcedure, DateTime date, String instrument, String typeObject) throws SybSQLException { Object result = null; ResultSet rs = null; CallableStatement cst = null; StringBuilder sb = new StringBuilder(); try { cst = connection.prepareCall(storedProcedure); cst.setDate(1, new java.sql.Date(date.getMillis())); cst.setString(2, instrument); cst.setString(3, typeObject); rs = cst.executeQuery(); while (rs.next()) { sb.append(rs.getObject("M_OBJECT")); } result = sb; } catch (IOException e) { System.err.println(e.getMessage()); } catch (SQLException e) { System.err.println(e.getMessage()); } finally { try { rs.close(); } catch (Exception e) { } try { cst.close(); } catch (Exception e) { } } return result; }
Programme appelant la fonction ci-dessus, au lieu du test counter != 0, je souhaite faire counter != nbTimes mais je ne sais pas comment
Merci d'avance
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 public void static getData(final Connection connection, String storedProcedure, DateTime date, String instrument, String typeObject, int nbTimes) { Object result = null; int counter = 0; try { result = getObjectFromDb(connection, storedProcedure, date, instrument, typeObject); } catch (SybException e) { System.err.println(e.getMessage()); counter++; } finally { try { if (counter != 0) { result = getObjectFromDb(connection, storedProcedure, date, instrument, typeObject); } } catch (Exception e) { System.err.println(e.getMessage()); } } return result; }
Partager