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 58 59 60 61
| public void compare(PrintStream out, ResultSet oldRs, ResultSet newRs) throws SQLException {
ResultSetMetaData oldMd = oldRs.getMetaData();
//ResultSetMetaData newMd = newRs.getMetaData();
int nbCol = oldMd.getColumnCount();
//int newNbCol = newMd.getColumnCount();
// normalement on devrait tester ici si nbCol == newNbCol et si les colonnes sont les mêmes/de même type
// on passe çà parce que tu es sûr que ça ne sera jamais le cas
// attention, ne fonctionne que si les resultset sont triés dans le même ordre
boolean loop=true;
while( loop ) {
if ( oldRs.next() ) {
if ( newRs.next() ) {
for( int i=1; i<=nbCol; i++ ) {
Object oldValue = oldRs.getObject(i);
Object newValue = newRs.getObject(i);
if ( oldRs.wasNull() ) {
if ( !newRs.wasNull() ) {
writeDifference( out, oldMd.getColumnName(i), "NULL", newValue.toString() );
}
}
else if ( newRs.wasNull() ) {
writeDifference( out, oldMd.getColumnName(i), oldValue.toString(), "NULL" );
}
else if ( !oldValue.equals(newValue) ) {
writeDifference( out, oldMd.getColumnName(i), oldValue.toString(), newValue.toString() );
}
}
}
else {
// il y a moins d'enregistrement dans rs2 que dans rs1...
// je ne sais pas ce que tu veux faire dans ce cas...
loop = false; // on arrête de comparer en tout cas
}
}
else {
if ( newRs.next() ) {
// il y a plus d'enregistrement dans rs2 que dans rs1...
// je ne sais pas ce que tu veux faire dans ce cas...
}
// else (correspond à la fin des 2 results sets de même taille).
loop = false; // on arrête de comparer en tout cas
}
}
}
private void writeDifference(PrintStream out, String name, String oldValue, String newValue) {
out.printf("%s\t%s\t%s%n", name, oldValue, newValue);
} |
Partager