changeset 4074:100c4e0a45e1

Improved infrastructure for prepared statements. flys-aft/trunk@3407 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 13 Dec 2011 14:32:55 +0000
parents 2c70fae83d0c
children dbd0b3b1b8b8
files flys-aft/ChangeLog flys-aft/src/main/java/de/intevation/db/ConnectedStatements.java flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java flys-aft/src/main/java/de/intevation/db/Statements.java
diffstat 4 files changed, 78 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/flys-aft/ChangeLog	Tue Dec 13 13:41:43 2011 +0000
+++ b/flys-aft/ChangeLog	Tue Dec 13 14:32:55 2011 +0000
@@ -1,3 +1,14 @@
+2011-12-13	Sascha L. Teichmann	<sascha.teichmann@inteavtion.de>
+
+	* src/main/java/de/intevation/db/ConnectionBuilder.java: Removed 
+	  statements here.
+
+	* src/main/java/de/intevation/db/Statements.java: Added method
+	  to access the hole map of statements.
+
+	* src/main/java/de/intevation/db/ConnectedStatements.java: New.
+	  A cache that binds prepared statements to a connection.
+
 2011-12-13	Sascha L. Teichmann	<sascha.teichmann@inteavtion.de>
 
 	* src/main/java/de/intevation/db/ConnectionBuilder.java: Added
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-aft/src/main/java/de/intevation/db/ConnectedStatements.java	Tue Dec 13 14:32:55 2011 +0000
@@ -0,0 +1,57 @@
+package de.intevation.db;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class ConnectedStatements
+{
+    protected Connection connection;
+
+    protected Map<String, SymbolicStatement> statements;
+
+    protected Map<String, SymbolicStatement.Instance> boundStatements;
+
+    public ConnectedStatements(
+        Connection connection,
+        Map<String, SymbolicStatement> statements
+    ) {
+        this.connection = connection;
+        this.statements = statements;
+
+        boundStatements = new HashMap<String, SymbolicStatement.Instance>();
+    }
+
+    public SymbolicStatement.Instance getStatement(String key) 
+    throws SQLException
+    {
+        SymbolicStatement.Instance stmnt = boundStatements.get(key);
+        if (stmnt != null) {
+            return stmnt;
+        }
+
+        SymbolicStatement ss = statements.get(key);
+        if (ss == null) {
+            return null;
+        }
+
+        stmnt = ss.new Instance(connection);
+        boundStatements.put(key, stmnt);
+        return stmnt;
+    }
+
+    public void close() {
+        for (SymbolicStatement.Instance s: boundStatements.values()) {
+            s.close();
+        }
+
+        try {
+            connection.close();
+        }
+        catch (SQLException sqle) {
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java	Tue Dec 13 13:41:43 2011 +0000
+++ b/flys-aft/src/main/java/de/intevation/db/ConnectionBuilder.java	Tue Dec 13 14:32:55 2011 +0000
@@ -29,12 +29,9 @@
     protected String password;
     protected String url;
 
-    protected Statements statements;
-
     public ConnectionBuilder(String type, Document document) {
         this.type = type;
         extractCredentials(document);
-        statements = new Statements(type, driver != null ? driver : "");
     }
 
     protected void extractCredentials(Document document) {
@@ -72,8 +69,11 @@
         return DriverManager.getConnection(url, user, password);
     }
 
-    public SymbolicStatement getStatement(String key) {
-        return statements.getStatement(key);
+    public ConnectedStatements getConnectedStatements() throws SQLException {
+        return new ConnectedStatements(
+            getConnection(),
+            new Statements(type, driver != null ? driver : "")
+                .getStatements());
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-aft/src/main/java/de/intevation/db/Statements.java	Tue Dec 13 13:41:43 2011 +0000
+++ b/flys-aft/src/main/java/de/intevation/db/Statements.java	Tue Dec 13 14:32:55 2011 +0000
@@ -29,10 +29,14 @@
     }
 
     public SymbolicStatement getStatement(String key) {
+        return getStatements().get(key);
+    }
+
+    public Map<String, SymbolicStatement> getStatements() {
         if (statements == null) {
             statements = loadStatements();
         }
-        return statements.get(key);
+        return statements;
     }
 
     protected Map<String, SymbolicStatement> loadStatements() {

http://dive4elements.wald.intevation.org