Index: src/main/org/h2/jdbc/JdbcPreparedStatement.java
===================================================================
--- src/main/org/h2/jdbc/JdbcPreparedStatement.java	(revision 4205)
+++ src/main/org/h2/jdbc/JdbcPreparedStatement.java	(working copy)
@@ -22,6 +22,8 @@
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.HashMap;
+
 import org.h2.command.CommandInterface;
 import org.h2.constant.ErrorCode;
 import org.h2.expression.ParameterInterface;
@@ -71,6 +73,11 @@
         command = conn.prepareCommand(sql, fetchSize);
     }
 
+    private HashMap<String, Integer> cachedColumnLabelMap = null;
+    void setCachedColumnLabelMap( HashMap<String, Integer> cachedColumnLabelMap) {
+    	this.cachedColumnLabelMap = cachedColumnLabelMap;
+    }
+    
     /**
      * Executes a query (select statement) and returns the result set. If
      * another result set exists for this statement, this will be closed (even
@@ -97,7 +104,7 @@
                 } finally {
                     setExecutingStatement(null);
                 }
-                resultSet = new JdbcResultSet(conn, this, result, id, closedByResultSet, scrollable, updatable);
+                resultSet = new JdbcResultSet(conn, this, result, id, closedByResultSet, scrollable, updatable, cachedColumnLabelMap);               
             }
             return resultSet;
         } catch (Exception e) {
Index: src/main/org/h2/jdbc/JdbcResultSet.java
===================================================================
--- src/main/org/h2/jdbc/JdbcResultSet.java	(revision 4205)
+++ src/main/org/h2/jdbc/JdbcResultSet.java	(working copy)
@@ -91,6 +91,7 @@
     private Value[] updateRow;
     private HashMap<String, Integer> columnLabelMap;
     private HashMap<Integer, Value[]> patchedRows;
+	private JdbcPreparedStatement preparedStatement = null;
 
     JdbcResultSet(JdbcConnection conn, JdbcStatement stat, ResultInterface result, int id,
                 boolean closeStatement, boolean scrollable, boolean updatable) {
@@ -103,6 +104,16 @@
         this.scrollable = scrollable;
         this.updatable = updatable;
     }
+    
+    /**
+     * Overload used to explicitly set the column-mapping.
+     */
+    JdbcResultSet(JdbcConnection conn, JdbcPreparedStatement preparedStatement, ResultInterface result, int id,
+            boolean closeStatement, boolean scrollable, boolean updatable, HashMap<String, Integer> columnLabelMap) {
+    	this(conn, preparedStatement, result, id, closeStatement, scrollable, updatable);
+    	this.columnLabelMap = columnLabelMap;
+    	this.preparedStatement = preparedStatement;
+    }
 
     /**
      * Moves the cursor to the next row of the result set.
@@ -2876,6 +2887,9 @@
                 }
                 // assign at the end so concurrent access is supported
                 columnLabelMap = map;
+                if(preparedStatement != null) {
+			    	preparedStatement.setCachedColumnLabelMap(columnLabelMap);
+			    }
             }
             Integer index = columnLabelMap.get(StringUtils.toUpperEnglish(columnLabel));
             if (index == null) {
