From a43057b72f68b3857a40102c1e207af95524e643 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Tue, 10 Oct 2017 20:30:38 +0800 Subject: [PATCH 1/4] Fix #3235: remote metadata is updated instead of delete + insert --- .../java/org/jabref/shared/DBMSProcessor.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jabref/shared/DBMSProcessor.java b/src/main/java/org/jabref/shared/DBMSProcessor.java index 9d10436e824..c3d25eb3635 100644 --- a/src/main/java/org/jabref/shared/DBMSProcessor.java +++ b/src/main/java/org/jabref/shared/DBMSProcessor.java @@ -527,11 +527,17 @@ public Map getSharedMetaData() { * @param data JabRef meta data as map */ public void setSharedMetaData(Map data) throws SQLException { - connection.createStatement().executeUpdate("TRUNCATE TABLE " + escape("METADATA")); // delete data all data from table - - for (Map.Entry metaEntry : data.entrySet()) { - - StringBuilder query = new StringBuilder() + StringBuilder updateQuery = new StringBuilder() + .append("UPDATE ") + .append(escape("METADATA")) + .append(" SET ") + .append(escape("VALUE")) + .append(" = ? ") + .append(" WHERE ") + .append(escape("KEY")) + .append(" = ?"); + + StringBuilder insertQuery = new StringBuilder() .append("INSERT INTO ") .append(escape("METADATA")) .append("(") @@ -539,13 +545,23 @@ public void setSharedMetaData(Map data) throws SQLException { .append(", ") .append(escape("VALUE")) .append(") VALUES(?, ?)"); - - try (PreparedStatement preparedStatement = connection.prepareStatement(query.toString())) { - preparedStatement.setString(1, metaEntry.getKey()); - preparedStatement.setString(2, metaEntry.getValue()); - preparedStatement.executeUpdate(); + + for (Map.Entry metaEntry : data.entrySet()) { + try (PreparedStatement updateStatement = connection.prepareStatement(updateQuery.toString())) { + updateStatement.setString(2, metaEntry.getKey()); + updateStatement.setString(1, metaEntry.getValue()); + if (updateStatement.executeUpdate() == 0) { + // No rows updated -> insert data + try (PreparedStatement insertStatement = connection.prepareStatement(insertQuery.toString())) { + insertStatement.setString(1, metaEntry.getKey()); + insertStatement.setString(2, metaEntry.getValue()); + insertStatement.executeUpdate(); + } catch (SQLException e) { + LOGGER.error("SQL Error: ", e); + } + } } catch (SQLException e) { - LOGGER.error("SQL Error: ", e); + LOGGER.error("SQL Error: ", e); } } } From b8b27b48ccc87f81db9d15316abfb2bdaf234c90 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Wed, 11 Oct 2017 14:22:07 +0800 Subject: [PATCH 2/4] Fix spaces --- src/main/java/org/jabref/shared/DBMSProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/shared/DBMSProcessor.java b/src/main/java/org/jabref/shared/DBMSProcessor.java index c3d25eb3635..41f4428daf0 100644 --- a/src/main/java/org/jabref/shared/DBMSProcessor.java +++ b/src/main/java/org/jabref/shared/DBMSProcessor.java @@ -561,7 +561,7 @@ public void setSharedMetaData(Map data) throws SQLException { } } } catch (SQLException e) { - LOGGER.error("SQL Error: ", e); + LOGGER.error("SQL Error: ", e); } } } From 964e6eb46c9c29342a8d8a5fc8aab165621b7fd6 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Wed, 11 Oct 2017 14:22:42 +0800 Subject: [PATCH 3/4] Fix spaces part 2 --- src/main/java/org/jabref/shared/DBMSProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/shared/DBMSProcessor.java b/src/main/java/org/jabref/shared/DBMSProcessor.java index 41f4428daf0..ea726fd7ea5 100644 --- a/src/main/java/org/jabref/shared/DBMSProcessor.java +++ b/src/main/java/org/jabref/shared/DBMSProcessor.java @@ -557,7 +557,7 @@ public void setSharedMetaData(Map data) throws SQLException { insertStatement.setString(2, metaEntry.getValue()); insertStatement.executeUpdate(); } catch (SQLException e) { - LOGGER.error("SQL Error: ", e); + LOGGER.error("SQL Error: ", e); } } } catch (SQLException e) { From 31b5c65c3dfaa112cc4f12af6de9e3dae726ee62 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Wed, 11 Oct 2017 14:24:54 +0800 Subject: [PATCH 4/4] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eab689c030..f2c8984e23d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# ### Fixed - We fixed an issue where JabRef would not terminated after asking to collect anonymous statistics [#2955 comment](https://github.com/JabRef/jabref/issues/2955#issuecomment-334591123) - We fixed an issue where JabRef would not shut down when started with the '-n' (No GUI) option. + - We improved the way metadata is updated in remote databases. [#3235](https://github.com/JabRef/jabref/issues/3235) ### Removed