From 5623f27f2d6685b3aa34a4024c8b52835d920f18 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 4 Aug 2014 11:47:51 +0200 Subject: [PATCH] [New] Implemented StrolchDao.hasElement() --- .../persistence/postgresql/PostgresqlDao.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java b/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java index 2337b83e5..3318f6161 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgresqlDao.java @@ -51,6 +51,27 @@ public abstract class PostgresqlDao implements Strolch protected abstract T parseFromXml(String id, String type, SQLXML xml); + @Override + public boolean hasElement(String type, String id) { + String sql = "select count(*) from " + getTableName() + " where type = ?"; + try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) { + statement.setString(1, type); + try (ResultSet result = statement.executeQuery()) { + result.next(); + long numberOfElements = result.getLong(1); + if (numberOfElements == 0) + return false; + if (numberOfElements == 1) + return true; + + String msg = MessageFormat.format("Non unique number of elements with type {0} and id {1}", type, id); + throw new StrolchPersistenceException(msg); + } + } catch (SQLException e) { + throw new StrolchPersistenceException("Failed to query size due to: " + e.getMessage(), e); + } + } + @Override public long querySize() { String sql = "select count(*) from " + getTableName(); @@ -66,7 +87,6 @@ public abstract class PostgresqlDao implements Strolch @Override public long querySize(String type) { - String sql = "select count(*) from " + getTableName() + " where type = ?"; try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) { statement.setString(1, type);