diff options
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/BrandAnalyzerInserter.java | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/database/BrandAnalyzerInserter.java b/src/database/BrandAnalyzerInserter.java index f7ed62c..d42dac2 100644 --- a/src/database/BrandAnalyzerInserter.java +++ b/src/database/BrandAnalyzerInserter.java @@ -13,22 +13,34 @@ import main.Watcher; public class BrandAnalyzerInserter implements Callable<Integer>, Watcher.Progressable { + private final Connection connection; private final BrandAnalyzerQueue analyzer; private final NamedPreparedStatement insertBrand; private volatile int count; public BrandAnalyzerInserter(Connection connection, BrandAnalyzerQueue analyzer) throws SQLException { + this.connection = connection; this.analyzer = analyzer; this.insertBrand = new NamedPreparedStatement(connection, "INSERT INTO mentionsbrand" + " SELECT :tweetid AS tweetid, :brand AS brand" + " WHERE NOT EXISTS (SELECT 1 FROM mentionsbrand WHERE" + " tweetid=:tweetid AND brand=:brand)"); + connection.setAutoCommit(false); } @Override public Integer call() throws SQLException { + try { + runInserter(); + } finally { + connection.close(); + } + return count; + } + + private void runInserter() throws SQLException { BrandAnalyzerQueue.Result result; while ((result = analyzer.next()) != null) { for (String brand : result.brands) { @@ -37,8 +49,11 @@ public class BrandAnalyzerInserter implements Callable<Integer>, } count++; + // save results every 1000 analyses + if (count % 1000 == 0) { + connection.commit(); + } } - return count; } @Override |