summaryrefslogtreecommitdiff
path: root/src/database/BrandAnalyzerInserter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/database/BrandAnalyzerInserter.java')
-rw-r--r--src/database/BrandAnalyzerInserter.java17
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