From 911a92ad5e3b0fc904b7d515137aa376a6e565d8 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Tue, 25 Feb 2014 21:19:10 +0100 Subject: [PATCH] [Minor] Added update count checking when executing INSERT, UPDATE, DEL --- .../postgresql/PostgreSqlOrderDao.java | 14 +++++++-- .../postgresql/PostgreSqlResourceDao.java | 14 +++++++-- .../PostgreSqlStrolchTransaction.java | 29 +++++++++---------- .../persistence/postgresql/PostgresqlDao.java | 7 ++++- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java index e72cc5c22..af99372bd 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlOrderDao.java @@ -107,7 +107,12 @@ public class PostgreSqlOrderDao extends PostgresqlDao implements OrderDao SQLXML sqlxml = createSqlXml(order, preparedStatement); preparedStatement.setSQLXML(6, sqlxml); try { - preparedStatement.execute(); + int modCount = preparedStatement.executeUpdate(); + if (modCount != 1) { + String msg = "Expected to save 1 element with id {0} but SQL statement modified {1} elements!"; + msg = MessageFormat.format(msg, order.getId(), modCount); + throw new StrolchPersistenceException(msg); + } } finally { sqlxml.free(); } @@ -133,7 +138,12 @@ public class PostgreSqlOrderDao extends PostgresqlDao implements OrderDao SQLXML sqlxml = createSqlXml(order, preparedStatement); preparedStatement.setSQLXML(5, sqlxml); try { - preparedStatement.execute(); + int modCount = preparedStatement.executeUpdate(); + if (modCount != 1) { + String msg = "Expected to update 1 element with id {0} but SQL statement modified {1} elements!"; + msg = MessageFormat.format(msg, order.getId(), modCount); + throw new StrolchPersistenceException(msg); + } } finally { sqlxml.free(); } diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java index fa5967fba..4f24d24a7 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlResourceDao.java @@ -99,7 +99,12 @@ public class PostgreSqlResourceDao extends PostgresqlDao implements Re SQLXML sqlxml = createSqlXml(res, preparedStatement); preparedStatement.setSQLXML(4, sqlxml); try { - preparedStatement.execute(); + int modCount = preparedStatement.executeUpdate(); + if (modCount != 1) { + String msg = "Expected to save 1 element with id {0} but SQL statement modified {1} elements!"; + msg = MessageFormat.format(msg, res.getId(), modCount); + throw new StrolchPersistenceException(msg); + } } finally { sqlxml.free(); } @@ -122,7 +127,12 @@ public class PostgreSqlResourceDao extends PostgresqlDao implements Re SQLXML sqlxml = createSqlXml(resource, preparedStatement); preparedStatement.setSQLXML(3, sqlxml); try { - preparedStatement.execute(); + int modCount = preparedStatement.executeUpdate(); + if (modCount != 1) { + String msg = "Expected to update 1 element with id {0} but SQL statement modified {1} elements!"; + msg = MessageFormat.format(msg, resource.getId(), modCount); + throw new StrolchPersistenceException(msg); + } } finally { sqlxml.free(); } diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java index 196fe69e9..16f3a975b 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java @@ -43,22 +43,19 @@ public class PostgreSqlStrolchTransaction extends AbstractTransaction { @Override protected void commit(TransactionResult txResult) throws Exception { - try { - if (this.orderDao != null) - this.orderDao.commit(txResult); - if (this.resourceDao != null) - this.resourceDao.commit(txResult); - if (this.connection != null) - this.connection.commit(); - } finally { - if (this.connection != null) { - try { - this.connection.close(); - } catch (Exception e) { - logger.error("Failed to close connection due to " + e.getMessage(), e); //$NON-NLS-1$ - } - } - } + + // first perform DAOs + if (this.orderDao != null) + this.orderDao.commit(txResult); + if (this.resourceDao != null) + this.resourceDao.commit(txResult); + + // then commit the SQL connection + if (this.connection != null) + this.connection.commit(); + + // and close the connection, but not catching, as otherwise we can't rollback in exception case + this.connection.close(); } @Override diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java b/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java index f7f6c7f4a..a2214308a 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java @@ -289,7 +289,12 @@ public abstract class PostgresqlDao implements Strolch try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) { preparedStatement.setString(1, element.getId()); - preparedStatement.execute(); + int modCount = preparedStatement.executeUpdate(); + if (modCount != 1) { + String msg = "Expected to delete 1 element with id {0} but SQL statement modified {1} elements!"; + msg = MessageFormat.format(msg, element.getId(), modCount); + throw new StrolchPersistenceException(msg); + } } catch (SQLException e) { throw new StrolchPersistenceException(MessageFormat.format("Failed to update Order {0} due to {2}",