StatementWrapper.java
上传用户:sxlinghang
上传日期:2022-07-20
资源大小:1405k
文件大小:23k
源码类别:

数据库编程

开发平台:

Java

  1. /*
  2.    Copyright (C) 2004 MySQL AB
  3.    
  4.       This program is free software; you can redistribute it and/or modify
  5.       it under the terms of the GNU General Public License as published by
  6.       the Free Software Foundation; either version 2 of the License, or
  7.       (at your option) any later version.
  8.    
  9.       This program is distributed in the hope that it will be useful,
  10.       but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.       GNU General Public License for more details.
  13.    
  14.       You should have received a copy of the GNU General Public License
  15.       along with this program; if not, write to the Free Software
  16.       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.       
  18.  */
  19. package com.mysql.jdbc.jdbc2.optional;
  20. import com.mysql.jdbc.SQLError;
  21. import java.sql.Connection;
  22. import java.sql.ResultSet;
  23. import java.sql.SQLException;
  24. import java.sql.SQLWarning;
  25. import java.sql.Statement;
  26. /**
  27.  * Wraps statements so that errors can be reported correctly to 
  28.  * ConnectionEventListeners.
  29.  *
  30.  * @author Mark Matthews
  31.  * 
  32.  * @version $Id: StatementWrapper.java,v 1.1.2.1 2004/02/13 17:55:30 mmatthew Exp $
  33.  */
  34. class StatementWrapper extends WrapperBase implements Statement {
  35.     protected Statement wrappedStmt;
  36.     protected StatementWrapper(MysqlPooledConnection conn, Statement toWrap) {
  37.         this.pooledConnection = conn;
  38.         this.wrappedStmt = toWrap;
  39.     }
  40.     /* (non-Javadoc)
  41.      * @see java.sql.Statement#getConnection()
  42.      */
  43.     public Connection getConnection() throws SQLException {
  44.         try {
  45.             if (this.wrappedStmt != null) {
  46.                 return this.wrappedStmt.getConnection();
  47.             } else {
  48.                 throw new SQLException("Statement already closed",
  49.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  50.             }
  51.         } catch (SQLException sqlEx) {
  52.             checkAndFireConnectionError(sqlEx);
  53.         }
  54.         return null; // we actually never get here, but the compiler can't figure 
  55.         // that out
  56.     }
  57.     /* (non-Javadoc)
  58.      * @see java.sql.Statement#setCursorName(java.lang.String)
  59.      */
  60.     public void setCursorName(String name) throws SQLException {
  61.         try {
  62.             if (this.wrappedStmt != null) {
  63.                 this.wrappedStmt.setCursorName(name);
  64.             } else {
  65.                 throw new SQLException("Statement already closed",
  66.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  67.             }
  68.         } catch (SQLException sqlEx) {
  69.             checkAndFireConnectionError(sqlEx);
  70.         }
  71.     }
  72.     /* (non-Javadoc)
  73.      * @see java.sql.Statement#setEscapeProcessing(boolean)
  74.      */
  75.     public void setEscapeProcessing(boolean enable) throws SQLException {
  76.         try {
  77.             if (this.wrappedStmt != null) {
  78.                 this.wrappedStmt.setEscapeProcessing(enable);
  79.             } else {
  80.                 throw new SQLException("Statement already closed",
  81.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  82.             }
  83.         } catch (SQLException sqlEx) {
  84.             checkAndFireConnectionError(sqlEx);
  85.         }
  86.     }
  87.     /* (non-Javadoc)
  88.      * @see java.sql.Statement#setFetchDirection(int)
  89.      */
  90.     public void setFetchDirection(int direction) throws SQLException {
  91.         try {
  92.             if (this.wrappedStmt != null) {
  93.                 this.wrappedStmt.setFetchDirection(direction);
  94.             } else {
  95.                 throw new SQLException("Statement already closed",
  96.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  97.             }
  98.         } catch (SQLException sqlEx) {
  99.             checkAndFireConnectionError(sqlEx);
  100.         }
  101.     }
  102.     /* (non-Javadoc)
  103.      * @see java.sql.Statement#getFetchDirection()
  104.      */
  105.     public int getFetchDirection() throws SQLException {
  106.         try {
  107.             if (this.wrappedStmt != null) {
  108.                 return this.wrappedStmt.getFetchDirection();
  109.             } else {
  110.                 throw new SQLException("Statement already closed",
  111.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  112.             }
  113.         } catch (SQLException sqlEx) {
  114.             checkAndFireConnectionError(sqlEx);
  115.         }
  116.         return ResultSet.FETCH_FORWARD; // we actually never get here, but the compiler can't figure 
  117.         // that out
  118.     }
  119.     /* (non-Javadoc)
  120.      * @see java.sql.Statement#setFetchSize(int)
  121.      */
  122.     public void setFetchSize(int rows) throws SQLException {
  123.         try {
  124.             if (this.wrappedStmt != null) {
  125.                 this.wrappedStmt.setFetchSize(rows);
  126.             } else {
  127.                 throw new SQLException("Statement already closed",
  128.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  129.             }
  130.         } catch (SQLException sqlEx) {
  131.             checkAndFireConnectionError(sqlEx);
  132.         }
  133.     }
  134.     /* (non-Javadoc)
  135.      * @see java.sql.Statement#getFetchSize()
  136.      */
  137.     public int getFetchSize() throws SQLException {
  138.         try {
  139.             if (this.wrappedStmt != null) {
  140.                 return this.wrappedStmt.getFetchSize();
  141.             } else {
  142.                 throw new SQLException("Statement already closed",
  143.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  144.             }
  145.         } catch (SQLException sqlEx) {
  146.             checkAndFireConnectionError(sqlEx);
  147.         }
  148.         return 0; // we actually never get here, but the compiler can't figure 
  149.         // that out
  150.     }
  151.     /* (non-Javadoc)
  152.      * @see java.sql.Statement#getGeneratedKeys()
  153.      */
  154.     public ResultSet getGeneratedKeys() throws SQLException {
  155.         try {
  156.             if (this.wrappedStmt != null) {
  157.                 return this.wrappedStmt.getGeneratedKeys();
  158.             } else {
  159.                 throw new SQLException("Statement already closed",
  160.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  161.             }
  162.         } catch (SQLException sqlEx) {
  163.             checkAndFireConnectionError(sqlEx);
  164.         }
  165.         return null; // we actually never get here, but the compiler can't figure 
  166.         // that out
  167.     }
  168.     /* (non-Javadoc)
  169.      * @see java.sql.Statement#setMaxFieldSize(int)
  170.      */
  171.     public void setMaxFieldSize(int max) throws SQLException {
  172.         try {
  173.             if (this.wrappedStmt != null) {
  174.                 this.wrappedStmt.setMaxFieldSize(max);
  175.             } else {
  176.                 throw new SQLException("Statement already closed",
  177.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  178.             }
  179.         } catch (SQLException sqlEx) {
  180.             checkAndFireConnectionError(sqlEx);
  181.         }
  182.     }
  183.     /* (non-Javadoc)
  184.      * @see java.sql.Statement#getMaxFieldSize()
  185.      */
  186.     public int getMaxFieldSize() throws SQLException {
  187.         try {
  188.             if (this.wrappedStmt != null) {
  189.                 return this.wrappedStmt.getMaxFieldSize();
  190.             } else {
  191.                 throw new SQLException("Statement already closed",
  192.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  193.             }
  194.         } catch (SQLException sqlEx) {
  195.             checkAndFireConnectionError(sqlEx);
  196.         }
  197.         return 0; // we actually never get here, but the compiler can't figure 
  198.         // that out
  199.     }
  200.     /* (non-Javadoc)
  201.      * @see java.sql.Statement#setMaxRows(int)
  202.      */
  203.     public void setMaxRows(int max) throws SQLException {
  204.         try {
  205.             if (this.wrappedStmt != null) {
  206.                 this.wrappedStmt.setMaxRows(max);
  207.             } else {
  208.                 throw new SQLException("Statement already closed",
  209.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  210.             }
  211.         } catch (SQLException sqlEx) {
  212.             checkAndFireConnectionError(sqlEx);
  213.         }
  214.     }
  215.     /* (non-Javadoc)
  216.      * @see java.sql.Statement#getMaxRows()
  217.      */
  218.     public int getMaxRows() throws SQLException {
  219.         try {
  220.             if (this.wrappedStmt != null) {
  221.                 return this.wrappedStmt.getMaxRows();
  222.             } else {
  223.                 throw new SQLException("Statement already closed",
  224.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  225.             }
  226.         } catch (SQLException sqlEx) {
  227.             checkAndFireConnectionError(sqlEx);
  228.         }
  229.         return 0; // we actually never get here, but the compiler can't figure 
  230.         // that out
  231.     }
  232.     /* (non-Javadoc)
  233.      * @see java.sql.Statement#getMoreResults()
  234.      */
  235.     public boolean getMoreResults() throws SQLException {
  236.         try {
  237.             if (this.wrappedStmt != null) {
  238.                 return this.wrappedStmt.getMoreResults();
  239.             } else {
  240.                 throw new SQLException("Statement already closed",
  241.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  242.             }
  243.         } catch (SQLException sqlEx) {
  244.             checkAndFireConnectionError(sqlEx);
  245.         }
  246.         return false;
  247.     }
  248.     /* (non-Javadoc)
  249.      * @see java.sql.Statement#getMoreResults(int)
  250.      */
  251.     public boolean getMoreResults(int current) throws SQLException {
  252.         try {
  253.             if (this.wrappedStmt != null) {
  254.                 return this.wrappedStmt.getMoreResults(current);
  255.             } else {
  256.                 throw new SQLException("Statement already closed",
  257.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  258.             }
  259.         } catch (SQLException sqlEx) {
  260.             checkAndFireConnectionError(sqlEx);
  261.         }
  262.         return false;
  263.     }
  264.     /* (non-Javadoc)
  265.      * @see java.sql.Statement#setQueryTimeout(int)
  266.      */
  267.     public void setQueryTimeout(int seconds) throws SQLException {
  268.         try {
  269.             if (this.wrappedStmt != null) {
  270.                 this.wrappedStmt.setQueryTimeout(seconds);
  271.             } else {
  272.                 throw new SQLException("Statement already closed",
  273.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  274.             }
  275.         } catch (SQLException sqlEx) {
  276.             checkAndFireConnectionError(sqlEx);
  277.         }
  278.     }
  279.     /* (non-Javadoc)
  280.      * @see java.sql.Statement#getQueryTimeout()
  281.      */
  282.     public int getQueryTimeout() throws SQLException {
  283.         try {
  284.             if (this.wrappedStmt != null) {
  285.                 return this.wrappedStmt.getQueryTimeout();
  286.             } else {
  287.                 throw new SQLException("Statement already closed",
  288.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  289.             }
  290.         } catch (SQLException sqlEx) {
  291.             checkAndFireConnectionError(sqlEx);
  292.         }
  293.         return 0;
  294.     }
  295.     /* (non-Javadoc)
  296.      * @see java.sql.Statement#getResultSet()
  297.      */
  298.     public ResultSet getResultSet() throws SQLException {
  299.         try {
  300.             if (this.wrappedStmt != null) {
  301.                 return this.wrappedStmt.getResultSet();
  302.             } else {
  303.                 throw new SQLException("Statement already closed",
  304.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  305.             }
  306.         } catch (SQLException sqlEx) {
  307.             checkAndFireConnectionError(sqlEx);
  308.         }
  309.         return null;
  310.     }
  311.     /* (non-Javadoc)
  312.      * @see java.sql.Statement#getResultSetConcurrency()
  313.      */
  314.     public int getResultSetConcurrency() throws SQLException {
  315.         try {
  316.             if (this.wrappedStmt != null) {
  317.                 return this.wrappedStmt.getResultSetConcurrency();
  318.             } else {
  319.                 throw new SQLException("Statement already closed",
  320.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  321.             }
  322.         } catch (SQLException sqlEx) {
  323.             checkAndFireConnectionError(sqlEx);
  324.         }
  325.         return 0;
  326.     }
  327.     /* (non-Javadoc)
  328.      * @see java.sql.Statement#getResultSetHoldability()
  329.      */
  330.     public int getResultSetHoldability() throws SQLException {
  331.         try {
  332.             if (this.wrappedStmt != null) {
  333.                 return this.wrappedStmt.getResultSetHoldability();
  334.             } else {
  335.                 throw new SQLException("Statement already closed",
  336.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  337.             }
  338.         } catch (SQLException sqlEx) {
  339.             checkAndFireConnectionError(sqlEx);
  340.         }
  341.         return Statement.CLOSE_CURRENT_RESULT;
  342.     }
  343.     /* (non-Javadoc)
  344.      * @see java.sql.Statement#getResultSetType()
  345.      */
  346.     public int getResultSetType() throws SQLException {
  347.         try {
  348.             if (this.wrappedStmt != null) {
  349.                 return this.wrappedStmt.getResultSetType();
  350.             } else {
  351.                 throw new SQLException("Statement already closed",
  352.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  353.             }
  354.         } catch (SQLException sqlEx) {
  355.             checkAndFireConnectionError(sqlEx);
  356.         }
  357.         return ResultSet.TYPE_FORWARD_ONLY;
  358.     }
  359.     /* (non-Javadoc)
  360.      * @see java.sql.Statement#getUpdateCount()
  361.      */
  362.     public int getUpdateCount() throws SQLException {
  363.         try {
  364.             if (this.wrappedStmt != null) {
  365.                 return this.wrappedStmt.getUpdateCount();
  366.             } else {
  367.                 throw new SQLException("Statement already closed",
  368.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  369.             }
  370.         } catch (SQLException sqlEx) {
  371.             checkAndFireConnectionError(sqlEx);
  372.         }
  373.         return -1;
  374.     }
  375.     /* (non-Javadoc)
  376.      * @see java.sql.Statement#getWarnings()
  377.      */
  378.     public SQLWarning getWarnings() throws SQLException {
  379.         try {
  380.             if (this.wrappedStmt != null) {
  381.                 return this.wrappedStmt.getWarnings();
  382.             } else {
  383.                 throw new SQLException("Statement already closed",
  384.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  385.             }
  386.         } catch (SQLException sqlEx) {
  387.             checkAndFireConnectionError(sqlEx);
  388.         }
  389.         return null;
  390.     }
  391.     /* (non-Javadoc)
  392.      * @see java.sql.Statement#addBatch(java.lang.String)
  393.      */
  394.     public void addBatch(String sql) throws SQLException {
  395.         try {
  396.             if (this.wrappedStmt != null) {
  397.                 this.wrappedStmt.addBatch(sql);
  398.             }
  399.         } catch (SQLException sqlEx) {
  400.             checkAndFireConnectionError(sqlEx);
  401.         }
  402.     }
  403.     /* (non-Javadoc)
  404.      * @see java.sql.Statement#cancel()
  405.      */
  406.     public void cancel() throws SQLException {
  407.         try {
  408.             if (this.wrappedStmt != null) {
  409.                 this.wrappedStmt.cancel();
  410.             }
  411.         } catch (SQLException sqlEx) {
  412.             checkAndFireConnectionError(sqlEx);
  413.         }
  414.     }
  415.     /* (non-Javadoc)
  416.      * @see java.sql.Statement#clearBatch()
  417.      */
  418.     public void clearBatch() throws SQLException {
  419.         try {
  420.             if (this.wrappedStmt != null) {
  421.                 this.wrappedStmt.clearBatch();
  422.             }
  423.         } catch (SQLException sqlEx) {
  424.             checkAndFireConnectionError(sqlEx);
  425.         }
  426.     }
  427.     /* (non-Javadoc)
  428.      * @see java.sql.Statement#clearWarnings()
  429.      */
  430.     public void clearWarnings() throws SQLException {
  431.         try {
  432.             if (this.wrappedStmt != null) {
  433.                 this.wrappedStmt.clearWarnings();
  434.             }
  435.         } catch (SQLException sqlEx) {
  436.             checkAndFireConnectionError(sqlEx);
  437.         }
  438.     }
  439.     /* (non-Javadoc)
  440.      * @see java.sql.Statement#close()
  441.      */
  442.     public void close() throws SQLException {
  443.         try {
  444.             if (this.wrappedStmt != null) {
  445.                 this.wrappedStmt.close();
  446.             }
  447.         } catch (SQLException sqlEx) {
  448.             checkAndFireConnectionError(sqlEx);
  449.         } finally {
  450.             this.wrappedStmt = null;
  451.             this.pooledConnection = null;
  452.         }
  453.     }
  454.     /* (non-Javadoc)
  455.      * @see java.sql.Statement#execute(java.lang.String, int)
  456.      */
  457.     public boolean execute(String sql, int autoGeneratedKeys)
  458.         throws SQLException {
  459.         try {
  460.             if (this.wrappedStmt != null) {
  461.                 return this.wrappedStmt.execute(sql, autoGeneratedKeys);
  462.             } else {
  463.                 throw new SQLException("Statement already closed",
  464.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  465.             }
  466.         } catch (SQLException sqlEx) {
  467.             checkAndFireConnectionError(sqlEx);
  468.         }
  469.         return false; // we actually never get here, but the compiler can't figure 
  470.         // that out
  471.     }
  472.     /* (non-Javadoc)
  473.      * @see java.sql.Statement#execute(java.lang.String, int[])
  474.      */
  475.     public boolean execute(String sql, int[] columnIndexes)
  476.         throws SQLException {
  477.         try {
  478.             if (this.wrappedStmt != null) {
  479.                 return this.wrappedStmt.execute(sql, columnIndexes);
  480.             } else {
  481.                 throw new SQLException("Statement already closed",
  482.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  483.             }
  484.         } catch (SQLException sqlEx) {
  485.             checkAndFireConnectionError(sqlEx);
  486.         }
  487.         return false; // we actually never get here, but the compiler can't figure 
  488.         // that out
  489.     }
  490.     /* (non-Javadoc)
  491.      * @see java.sql.Statement#execute(java.lang.String, java.lang.String[])
  492.      */
  493.     public boolean execute(String sql, String[] columnNames)
  494.         throws SQLException {
  495.         try {
  496.             if (this.wrappedStmt != null) {
  497.                 return this.wrappedStmt.execute(sql, columnNames);
  498.             } else {
  499.                 throw new SQLException("Statement already closed",
  500.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  501.             }
  502.         } catch (SQLException sqlEx) {
  503.             checkAndFireConnectionError(sqlEx);
  504.         }
  505.         return false; // we actually never get here, but the compiler can't figure 
  506.         // that out
  507.     }
  508.     /* (non-Javadoc)
  509.      * @see java.sql.Statement#execute(java.lang.String)
  510.      */
  511.     public boolean execute(String sql) throws SQLException {
  512.         try {
  513.             if (this.wrappedStmt != null) {
  514.                 return this.wrappedStmt.execute(sql);
  515.             } else {
  516.                 throw new SQLException("Statement already closed",
  517.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  518.             }
  519.         } catch (SQLException sqlEx) {
  520.             checkAndFireConnectionError(sqlEx);
  521.         }
  522.         return false; // we actually never get here, but the compiler can't figure 
  523.         // that out
  524.     }
  525.     /* (non-Javadoc)
  526.      * @see java.sql.Statement#executeBatch()
  527.      */
  528.     public int[] executeBatch() throws SQLException {
  529.         try {
  530.             if (this.wrappedStmt != null) {
  531.                 return this.wrappedStmt.executeBatch();
  532.             } else {
  533.                 throw new SQLException("Statement already closed",
  534.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  535.             }
  536.         } catch (SQLException sqlEx) {
  537.             checkAndFireConnectionError(sqlEx);
  538.         }
  539.         return null; // we actually never get here, but the compiler can't figure 
  540.         // that out
  541.     }
  542.     /* (non-Javadoc)
  543.      * @see java.sql.Statement#executeQuery(java.lang.String)
  544.      */
  545.     public ResultSet executeQuery(String sql) throws SQLException {
  546.         try {
  547.             if (this.wrappedStmt != null) {
  548.                 return this.wrappedStmt.executeQuery(sql);
  549.             } else {
  550.                 throw new SQLException("Statement already closed",
  551.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  552.             }
  553.         } catch (SQLException sqlEx) {
  554.             checkAndFireConnectionError(sqlEx);
  555.         }
  556.         return null; // we actually never get here, but the compiler can't figure 
  557.         // that out
  558.     }
  559.     /* (non-Javadoc)
  560.      * @see java.sql.Statement#executeUpdate(java.lang.String, int)
  561.      */
  562.     public int executeUpdate(String sql, int autoGeneratedKeys)
  563.         throws SQLException {
  564.         try {
  565.             if (this.wrappedStmt != null) {
  566.                 return this.wrappedStmt.executeUpdate(sql, autoGeneratedKeys);
  567.             } else {
  568.                 throw new SQLException("Statement already closed",
  569.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  570.             }
  571.         } catch (SQLException sqlEx) {
  572.             checkAndFireConnectionError(sqlEx);
  573.         }
  574.         return -1; // we actually never get here, but the compiler can't figure 
  575.         // that out
  576.     }
  577.     /* (non-Javadoc)
  578.      * @see java.sql.Statement#executeUpdate(java.lang.String, int[])
  579.      */
  580.     public int executeUpdate(String sql, int[] columnIndexes)
  581.         throws SQLException {
  582.         try {
  583.             if (this.wrappedStmt != null) {
  584.                 return this.wrappedStmt.executeUpdate(sql, columnIndexes);
  585.             } else {
  586.                 throw new SQLException("Statement already closed",
  587.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  588.             }
  589.         } catch (SQLException sqlEx) {
  590.             checkAndFireConnectionError(sqlEx);
  591.         }
  592.         return -1; // we actually never get here, but the compiler can't figure 
  593.         // that out
  594.     }
  595.     /* (non-Javadoc)
  596.      * @see java.sql.Statement#executeUpdate(java.lang.String, java.lang.String[])
  597.      */
  598.     public int executeUpdate(String sql, String[] columnNames)
  599.         throws SQLException {
  600.         try {
  601.             if (this.wrappedStmt != null) {
  602.                 return this.wrappedStmt.executeUpdate(sql, columnNames);
  603.             } else {
  604.                 throw new SQLException("Statement already closed",
  605.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  606.             }
  607.         } catch (SQLException sqlEx) {
  608.             checkAndFireConnectionError(sqlEx);
  609.         }
  610.         return -1; // we actually never get here, but the compiler can't figure 
  611.         // that out
  612.     }
  613.     /* (non-Javadoc)
  614.      * @see java.sql.Statement#executeUpdate(java.lang.String)
  615.      */
  616.     public int executeUpdate(String sql) throws SQLException {
  617.         try {
  618.             if (this.wrappedStmt != null) {
  619.                 return this.wrappedStmt.executeUpdate(sql);
  620.             } else {
  621.                 throw new SQLException("Statement already closed",
  622.                     SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
  623.             }
  624.         } catch (SQLException sqlEx) {
  625.             checkAndFireConnectionError(sqlEx);
  626.         }
  627.         return -1; // we actually never get here, but the compiler can't figure 
  628.         // that out
  629.     }
  630. }