Ausführen mehrerer Abfragen als eine dblink-Transaktion
Ich arbeite in einer Java-Anwendung, in der ich die beiden Abfragen (als Strings in Java) gleichzeitig ausführen und die Transaktion zurücksetzen muss, wenn Fehler aufgetreten sind.
SELECT dblink_exec('hostaddr=xxx.xx.xxx.xxx port=5432 dbname=bdname user=myuser password=mypass connect_timeout=2',
'INSERT INTO table3(field4)
VALUES (5)') AS result;
SELECT dblink_exec('hostaddr=xxx.xx.xxx.xxx port=5432 dbname=bdname user=myuser password=mypass connect_timeout=2',
'UPDATE table1 SET field2 = field2 + 3.0 WHERE field1 = 16436') AS result;
AKTUALISIERE
Ich habe einen String mit den beiden durch @ getrennten Abfragen erstell;
wie in den Kommentaren vorschlagen
AKTUALISIERE
Ich habe JDBC-Atomic-Transaktionen als Code in Java ausprobiert. Ich erzwinge, dass die zweite SQL fehlschlägt, aber selbst wenn ich .setAutoCommit (false) spezifiziere; das dblink betraf die andere datenbank mit der ersten abfrage. Ich habe den gleichen Code ohne Dblink-Transaktionen ausprobiert und das Rollback funktioniert gut. dblink ist das problem.
Java Updat
public static boolean ejecutarTransaccionDblink(String sql) {
boolean estado = false;
try {
Statement sentencia = conexion.createStatement();
conexion.setAutoCommit(false);
if (sql.length() != 0) {
if (sentencia.execute(sql)) {
conexion.commit();
estado = true;
}
}
} catch (SQLException ex) {
System.out.println(ex.toString());
try {
estado = false;
conexion.rollback();
} catch (SQLException ex1) {
}
} finally {
try {
conexion.setAutoCommit(true);
return estado;
} catch (SQLException ex) {
return estado;
}
}
}
Danke für Ihre Hilfe