From b848cb5d3bbe11b69462b2bb8d8a0bd331c902ff Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Sun, 11 May 2014 15:39:04 +0200 Subject: Wrap queries in a transaction with rollback If a tweet cannot be processed, then it must be faulty. Do not fill the database with useless information. --- src/main/DataFiller.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/DataFiller.java b/src/main/DataFiller.java index 803d926..71f1822 100644 --- a/src/main/DataFiller.java +++ b/src/main/DataFiller.java @@ -44,6 +44,8 @@ public class DataFiller { m_insertTweetUrl = new NamedPreparedStatement(m_connection, QueryUtils.insertTweetUrl); m_insertUserUrl = new NamedPreparedStatement(m_connection, QueryUtils.insertUserUrl); m_insertMentions = new NamedPreparedStatement(m_connection, QueryUtils.insertMentions); + // enable transactions + connection.setAutoCommit(false); } /** @@ -68,6 +70,18 @@ public class DataFiller { processTweet(tweet.retweeted_status); } + try { + // assume that no previous transaction was started. + saveTweet(tweet); + // concludes the previous query, implicitly starts a new transaction + m_connection.commit(); + } catch (Exception ex) { + m_connection.rollback(); + throw ex; + } + } + + private void saveTweet(Tweet tweet) throws SQLException { String text = sanitizeTweetText(tweet.text); // ensure that the user and tweet are known before adding relations QueryUtils.setInsertParams(m_insertTweet, m_insertProfile, tweet, text); -- cgit v1.2.1