Retour de requête anormalement vide
Bonjour,
J'ai hérité d'un petit programme Java (d'un ancien collègue) pour faire des migrations Oracle vers SQL Server (sur deux serveurs différents), dont voici une partie du code :
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
| oracle = oracleSource.getConnection();
sqlServer = sqlserverSource.getConnection();
sqlServer.setAutoCommit(false);
QueryHelper helper = helpers.get(jobName);
String table = helper.table;
table = table.toUpperCase();
LinkedHashMap<String, Column> oracleColumns = getTableColumns(oracle.getMetaData(), table);
LinkedHashMap<String, Column> sqlServerColumns = getTableColumns(sqlServer.getMetaData(), table);
List<String> commonColumns = new ArrayList<String>();
Set<Integer> codes = new HashSet<Integer>();
for (String column : oracleColumns.keySet()) {
if (sqlServerColumns.containsKey(column) && (helper.selectedColumns.isEmpty() || helper.selectedColumns.contains(column))) {
commonColumns.add(column);
codes.add(oracleColumns.get(column).type);
}
}
jobLogger = new JobLogger(job, commonColumns);
if (lastAcceptanceDate != null && new Date().after(lastAcceptanceDate)) {
jobLogger.log("CANCELLING JOB, too late !");
return;
}
jobLogger.log(".Used SQL Types: " + codes);
String queryString = "select * " + helper.buildFromPartOracle(month);
String insertString = "insert into " + table + " (" + StringUtils.join(commonColumns, ", ") + ") VALUES (" + StringUtils.repeat("?", ", ", commonColumns.size()) + ")";
PreparedStatement query = oracle.prepareStatement(queryString);
PreparedStatement insertStatement = sqlServer.prepareStatement(insertString);
jobLogger.log(".ORACLE QUERY: " + queryString);
StopWatch watch = new StopWatch();
watch.start();
query.setFetchSize(FETCH_SIZE);
ResultSet result = query.executeQuery();
while (result.next()) {
jobLogger.log(String.format("resultat : %s",result.getRow()));
} |
Donc, la première partie fait un select dans la base Oracle et la seconde partie fait un insert dans la base SQL Server.
Mon souci vient du retour de la requête Oracle qui est anormalement vide.
J'ai testé pas mal de modifications :
- Lancer le programme sur les deux serveurs en admin
- Retiré tout le code superflu
- Exécuté directement la requête dans query.executeQuery(requete);
- ...
Pourtant, la requête retourne bien quelque chose directement sur Oracle et j'ai vérifié 50 fois la connexion.
Ma requête met 2 minutes dans le programme et sur Oracle (donc même temps). De plus, il y a un système Try catch donc aucun Timout en vu.
Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?
Merci d'avance pour vos solutions.