Comment ré-exécuter SQL après erreur SybSQLException
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
Citation:
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)
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:(.
Fonction pour extraire les données
Code:
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 :oops:
Code:
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;
}
|
Merci d'avance