You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by da...@apache.org on 2006/01/23 16:58:53 UTC

svn commit: r371561 [1/11] - in /db/derby/code/trunk/java: client/org/apache/derby/client/ client/org/apache/derby/client/am/ client/org/apache/derby/client/net/ client/org/apache/derby/jdbc/ testing/org/apache/derbyTesting/functionTests/master/DerbyNe...

Author: davidvc
Date: Mon Jan 23 07:58:34 2006
New Revision: 371561

URL: http://svn.apache.org/viewcvs?rev=371561&view=rev
Log:
DERBY-852 - Convert client.am.SqlException to no longer extend
java.sql.SQLException.

The general approach here was to have all public methods throw
SQLException, and all internal methods throw SqlException.  In
some cases internal methods call public methods, and in those cases
I wrap the thrown SQLException into a SqlException for future use.
Otherwise the chain of exception dependencies would have caused almost
all internal methods to throw SQLException

Modified:
    db/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java
    db/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/CallableStatement.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Clob.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/ColumnMetaData.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Cursor.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/DatabaseMetaData.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/ExceptionFormatter.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/ParameterMetaData.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/PreparedStatement.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/ResultSet.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Savepoint.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Section.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Sqlca.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Statement.java
    db/derby/code/trunk/java/client/org/apache/derby/client/am/Utils.java
    db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java
    db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnection.java
    db/derby/code/trunk/java/client/org/apache/derby/jdbc/ClientBaseDataSource.java
    db/derby/code/trunk/java/client/org/apache/derby/jdbc/ClientConnectionPoolDataSource.java
    db/derby/code/trunk/java/client/org/apache/derby/jdbc/ClientDataSource.java
    db/derby/code/trunk/java/client/org/apache/derby/jdbc/ClientDriver.java
    db/derby/code/trunk/java/client/org/apache/derby/jdbc/ClientXADataSource.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/Stream.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/parameterMapping.out

Modified: db/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java?rev=371561&r1=371560&r2=371561&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java Mon Jan 23 07:58:34 2006
@@ -19,9 +19,13 @@
 */
 package org.apache.derby.client;
 
+import java.sql.SQLException;
+
 import org.apache.derby.client.am.SqlException;
 import org.apache.derby.client.net.NetLogWriter;
 import org.apache.derby.jdbc.ClientDataSource;
+import org.apache.derby.client.am.MessageId;
+import org.apache.derby.shared.common.reference.SQLState;
 
 public class ClientPooledConnection implements javax.sql.PooledConnection {
     private boolean newPC_ = true;
@@ -48,20 +52,27 @@
     public ClientPooledConnection(ClientDataSource ds,
                                   org.apache.derby.client.am.LogWriter logWriter,
                                   String user,
-                                  String password) throws SqlException {
-        logWriter_ = logWriter;
-        ds_ = ds;
-        user_ = user;
-        password_ = password;
-        listeners_ = new java.util.Vector();
-
-        netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
-                user,
-                password,
-                ds,
-                -1,
-                false);
-        physicalConnection_ = netPhysicalConnection_;
+                                  String password) throws SQLException {
+        try
+        {
+            logWriter_ = logWriter;
+            ds_ = ds;
+            user_ = user;
+            password_ = password;
+            listeners_ = new java.util.Vector();
+
+            netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
+                    user,
+                    password,
+                    ds,
+                    -1,
+                    false);
+            physicalConnection_ = netPhysicalConnection_;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
+        }
     }
 
     // Constructor for XA pooled connections only.
@@ -71,34 +82,48 @@
                                   org.apache.derby.client.am.LogWriter logWriter,
                                   String user,
                                   String password,
-                                  int rmId) throws SqlException {
-        logWriter_ = logWriter;
-        ds_ = ds;
-        user_ = user;
-        password_ = password;
-        rmId_ = rmId;
-        listeners_ = new java.util.Vector();
-        netXAPhysicalConnection_ = new org.apache.derby.client.net.NetXAConnection((NetLogWriter) logWriter_,
-                user,
-                password,
-                ds,
-                rmId,
-                true);
-        physicalConnection_ = netXAPhysicalConnection_;
+                                  int rmId) throws SQLException {
+        try
+        {
+            logWriter_ = logWriter;
+            ds_ = ds;
+            user_ = user;
+            password_ = password;
+            rmId_ = rmId;
+            listeners_ = new java.util.Vector();
+            netXAPhysicalConnection_ = new org.apache.derby.client.net.NetXAConnection((NetLogWriter) logWriter_,
+                    user,
+                    password,
+                    ds,
+                    rmId,
+                    true);
+            physicalConnection_ = netXAPhysicalConnection_;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
+        }
     }
 
     public ClientPooledConnection(ClientDataSource ds,
-                                  org.apache.derby.client.am.LogWriter logWriter) throws SqlException {
-        logWriter_ = logWriter;
-        ds_ = ds;
-        listeners_ = new java.util.Vector();
-        netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
-                null,
-                null,
-                ds,
-                -1,
-                false);
-        physicalConnection_ = netPhysicalConnection_;
+                                  org.apache.derby.client.am.LogWriter logWriter) throws SQLException {
+        try
+        {
+            logWriter_ = logWriter;
+            ds_ = ds;
+            listeners_ = new java.util.Vector();
+            netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
+                    null,
+                    null,
+                    ds,
+                    -1,
+                    false);
+            physicalConnection_ = netPhysicalConnection_;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
+        }
     }
 
     protected void finalize() throws java.lang.Throwable {
@@ -108,55 +133,67 @@
         close();
     }
 
-    public synchronized void close() throws SqlException {
-        if (logWriter_ != null) {
-            logWriter_.traceEntry(this, "close");
-        }
-
-        if (logicalConnection_ != null) {
-            logicalConnection_.nullPhysicalConnection();
-            logicalConnection_ = null;
-        }
+    public synchronized void close() throws SQLException {
+        try
+        {
+            if (logWriter_ != null) {
+                logWriter_.traceEntry(this, "close");
+            }
+
+            if (logicalConnection_ != null) {
+                logicalConnection_.nullPhysicalConnection();
+                logicalConnection_ = null;
+            }
+
+            if (physicalConnection_ == null) {
+                return;
+            }
 
-        if (physicalConnection_ == null) {
-            return;
-        }
-        try {
             // Even if the physcial connection is marked closed (in the pool),
             // this will close its underlying resources.
             physicalConnection_.closeResources();
-        } finally {
+        }
+        finally 
+        {
             physicalConnection_ = null;
         }
     }
 
     // This is the standard API for getting a logical connection handle for a pooled connection.
     // No "resettable" properties are passed, so user, password, and all other properties may not change.
-    public synchronized java.sql.Connection getConnection() throws SqlException {
-        if (logWriter_ != null) {
-            logWriter_.traceEntry(this, "getConnection");
-        }
-        createLogicalConnection();
-
-        if (!newPC_) {
-            physicalConnection_.reset(logWriter_, user_, password_, ds_, false); // false means do not recompute
-        }
-        // properties from the dataSource
-        // properties don't change
-        else {
-            physicalConnection_.lightReset();    //poolfix
-        }
-        newPC_ = false;
-
-        if (logWriter_ != null) {
-            logWriter_.traceExit(this, "getConnection", logicalConnection_);
+    public synchronized java.sql.Connection getConnection() throws SQLException {
+        try
+        {
+            if (logWriter_ != null) {
+                logWriter_.traceEntry(this, "getConnection");
+            }
+            createLogicalConnection();
+
+            if (!newPC_) {
+                physicalConnection_.reset(logWriter_, user_, password_, ds_, false); // false means do not recompute
+            }
+            // properties from the dataSource
+            // properties don't change
+            else {
+                physicalConnection_.lightReset();    //poolfix
+            }
+            newPC_ = false;
+
+            if (logWriter_ != null) {
+                logWriter_.traceExit(this, "getConnection", logicalConnection_);
+            }
+            return logicalConnection_;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
-        return logicalConnection_;
     }
 
     private void createLogicalConnection() throws SqlException {
         if (physicalConnection_ == null) {
-            throw new SqlException(logWriter_, "getConnection() is not valid on a closed PooledConnection.");
+            throw new SqlException(logWriter_,
+                new MessageId(SQLState.NOGETCONN_ON_CLOSED_POOLED_CONNECTION));
         }
         // Not the usual case, but if we have an existing logical connection, then we must close it by spec.
         // We close the logical connection without notifying the pool manager that this pooled connection is availabe for reuse.
@@ -197,7 +234,8 @@
     public void trashConnection(SqlException exception) {
         for (java.util.Enumeration e = listeners_.elements(); e.hasMoreElements();) {
             javax.sql.ConnectionEventListener listener = (javax.sql.ConnectionEventListener) e.nextElement();
-            javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent(this, exception);
+            java.sql.SQLException sqle = exception.getSQLException();
+            javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent(this, sqle);
             listener.connectionErrorOccurred(event);
         }
     }

Modified: db/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java?rev=371561&r1=371560&r2=371561&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java Mon Jan 23 07:58:34 2006
@@ -20,6 +20,7 @@
 package org.apache.derby.client;
 
 import java.sql.Connection;
+import java.sql.SQLException;
 import javax.sql.XAConnection;
 import javax.transaction.xa.XAResource;
 
@@ -42,7 +43,7 @@
     public ClientXAConnection(ClientXADataSource ds,
                               org.apache.derby.client.net.NetLogWriter logWtr,
                               String userId,
-                              String password) throws SqlException {
+                              String password) throws SQLException {
         super(ds, logWtr, userId, password, getUnigueRmId());
         derbyds_ = ds;
 
@@ -57,7 +58,7 @@
         xares_ = netXares_;
     }
 
-    public Connection getConnection() throws SqlException {
+    public Connection getConnection() throws SQLException {
         if (fFirstGetConnection_) {
             // Since super.getConnection() has already been called once
             // in the constructor, we don't need to call it again for the
@@ -84,7 +85,7 @@
         return rmId_;
     }
 
-    public XAResource getXAResource() throws SqlException {
+    public XAResource getXAResource() throws SQLException {
         if (logWriter_ != null) {
             logWriter_.traceExit(this, "getXAResource", xares_);
         }
@@ -105,25 +106,31 @@
                                                    String password,
                                                    org.apache.derby.jdbc.ClientDataSource dataSource,
                                                    int rmId,
-                                                   boolean isXAConn) throws SqlException {
+                                                   boolean isXAConn) throws SQLException {
+        try
+        {
+            controlCon_ = new NetXAConnection(logWriter,
+                    user,
+                    password,
+                    dataSource,
+                    rmId,
+                    isXAConn);
+            controlCon_.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
 
-        controlCon_ = new NetXAConnection(logWriter,
-                user,
-                password,
-                dataSource,
-                rmId,
-                isXAConn);
-        controlCon_.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+            if (logWriter_ != null) {
+                logWriter_.traceExit(this, "createControlConnection", controlCon_);
+            }
 
-        if (logWriter_ != null) {
-            logWriter_.traceExit(this, "createControlConnection", controlCon_);
+            return controlCon_;
         }
-
-        return controlCon_;
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
+        }            
     }
 
 
-    public synchronized void close() throws SqlException {
+    public synchronized void close() throws SQLException {
         super.close();
     }
 }

Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java?rev=371561&r1=371560&r2=371561&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java Mon Jan 23 07:58:34 2006
@@ -270,7 +270,7 @@
                     "at least one exception occurred on an individual member of the batch. " +
                     "Use getNextException() to retrieve the exceptions for specific batched elements.",
                             updateCounts);
-            bue.setNextException(accumulatedExceptions);
+            bue.setNextException(accumulatedExceptions.getSQLException());
             throw bue;
         }
     }

Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java?rev=371561&r1=371560&r2=371561&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java Mon Jan 23 07:58:34 2006
@@ -20,8 +20,8 @@
 
 package org.apache.derby.client.am;
 
+import java.sql.SQLException;
 import org.apache.derby.shared.common.reference.SQLState;
-
 public class Blob extends Lob implements java.sql.Blob {
     //-----------------------------state------------------------------------------
 
@@ -58,41 +58,55 @@
 
     // ---------------------------jdbc 2------------------------------------------
 
-    public long length() throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "length");
-            }
-            long retVal = super.sqlLength();
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "length", retVal);
+    public long length() throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "length");
+                }
+                long retVal = super.sqlLength();
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "length", retVal);
+                }
+                return retVal;
             }
-            return retVal;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
     // can return an array that may be have a length shorter than the supplied
     // length (no padding occurs)
-    public byte[] getBytes(long pos, int length) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "getBytes", (int) pos, length);
-            }
-            if (pos <= 0) {
-                throw new SqlException(agent_.logWriter_, 
-                    new MessageId(SQLState.BLOB_BAD_POSITION), 
-                    new Long(pos));
-            }
-            if (length < 0) {
-                throw new SqlException(agent_.logWriter_, 
-                    new MessageId(SQLState.BLOB_NONPOSITIVE_LENGTH),
-                    new Integer(length));
-            }
-            byte[] retVal = getBytesX(pos, length);
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "getBytes", retVal);
+    public byte[] getBytes(long pos, int length) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "getBytes", (int) pos, length);
+                }
+                if (pos <= 0) {
+                    throw new SqlException(agent_.logWriter_, 
+                        new MessageId(SQLState.BLOB_BAD_POSITION), 
+                        new Long(pos));
+                }
+                if (length < 0) {
+                    throw new SqlException(agent_.logWriter_, 
+                        new MessageId(SQLState.BLOB_NONPOSITIVE_LENGTH),
+                        new Integer(length));
+                }
+                byte[] retVal = getBytesX(pos, length);
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "getBytes", retVal);
+                }
+                return retVal;
             }
-            return retVal;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
@@ -100,7 +114,12 @@
         checkForClosedConnection();
 
         // we may need to check for overflow on this cast
-        long actualLength = Math.min(this.length() - pos + 1, (long) length);
+        long actualLength;
+        try {
+            actualLength = Math.min(this.length() - pos + 1, (long) length);
+        } catch ( SQLException se ) {
+            throw new SqlException(se);
+        }
 
         byte[] retVal = new byte[(int) actualLength];
         System.arraycopy(binaryString_, (int) pos + dataOffset_ - 1, retVal, 0, (int) actualLength);
@@ -108,16 +127,23 @@
     }
 
 
-    public java.io.InputStream getBinaryStream() throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "getBinaryStream");
-            }
-            java.io.InputStream retVal = getBinaryStreamX();
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "getBinaryStream", retVal);
+    public java.io.InputStream getBinaryStream() throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "getBinaryStream");
+                }
+                java.io.InputStream retVal = getBinaryStreamX();
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "getBinaryStream", retVal);
+                }
+                return retVal;
             }
-            return retVal;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
@@ -132,20 +158,27 @@
         return new java.io.ByteArrayInputStream(binaryString_, dataOffset_, binaryString_.length - dataOffset_);
     }
 
-    public long position(byte[] pattern, long start) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "position(byte[], long)", pattern, start);
-            }
-            if (pattern == null) {
-                throw new SqlException(agent_.logWriter_, 
-                    new MessageId(SQLState.BLOB_NULL_PATTERN));
-            }
-            long pos = positionX(pattern, start);
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "position(byte[], long)", pos);
+    public long position(byte[] pattern, long start) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "position(byte[], long)", pattern, start);
+                }
+                if (pattern == null) {
+                    throw new SqlException(agent_.logWriter_, 
+                        new MessageId(SQLState.BLOB_NULL_PATTERN));
+                }
+                long pos = positionX(pattern, start);
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "position(byte[], long)", pos);
+                }
+                return pos;
             }
-            return pos;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
@@ -155,20 +188,27 @@
         return binaryStringPosition(pattern, start);
     }
 
-    public long position(java.sql.Blob pattern, long start) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "position(Blob, long)", pattern, start);
-            }
-            if (pattern == null) {
-                throw new SqlException(agent_.logWriter_, 
-                    new MessageId(SQLState.BLOB_NULL_PATTERN));
-            }
-            long pos = positionX(pattern, start);
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "position(Blob, long)", pos);
+    public long position(java.sql.Blob pattern, long start) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "position(Blob, long)", pattern, start);
+                }
+                if (pattern == null) {
+                    throw new SqlException(agent_.logWriter_, 
+                        new MessageId(SQLState.BLOB_NULL_PATTERN));
+                }
+                long pos = positionX(pattern, start);
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "position(Blob, long)", pos);
+                }
+                return pos;
             }
-            return pos;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
@@ -185,29 +225,43 @@
     // -------------------------- JDBC 3.0 -----------------------------------
 
 
-    public int setBytes(long pos, byte[] bytes) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes);
-            }
-            int length = setBytesX(pos, bytes, 0, bytes.length);
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "setBytes", length);
+    public int setBytes(long pos, byte[] bytes) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes);
+                }
+                int length = setBytesX(pos, bytes, 0, bytes.length);
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "setBytes", length);
+                }
+                return length;
             }
-            return length;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
-    public int setBytes(long pos, byte[] bytes, int offset, int len) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes, offset, len);
-            }
-            int length = setBytesX(pos, bytes, offset, len);
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceExit(this, "setBytes", length);
+    public int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes, offset, len);
+                }
+                int length = setBytesX(pos, bytes, offset, len);
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceExit(this, "setBytes", length);
+                }
+                return length;
             }
-            return length;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }
 
@@ -249,7 +303,7 @@
         return length;
     }
 
-    public java.io.OutputStream setBinaryStream(long pos) throws SqlException {
+    public java.io.OutputStream setBinaryStream(long pos) throws SQLException {
         synchronized (agent_.connection_) {
             if (agent_.loggingEnabled()) {
                 agent_.logWriter_.traceEntry(this, "setBinaryStream", (int) pos);
@@ -263,25 +317,32 @@
         }
     }
 
-    public void truncate(long len) throws SqlException {
-        synchronized (agent_.connection_) {
-            if (agent_.loggingEnabled()) {
-                agent_.logWriter_.traceEntry(this, " truncate", (int) len);
-            }
-            if (len < 0 || len > this.length()) {
-                throw new SqlException(agent_.logWriter_,
-                    new MessageId(SQLState.INVALID_API_PARAMETER),
-                    new Long(len), "len", "Blob.truncate()");
-            }
-            if (len == this.length()) {
-                return;
+    public void truncate(long len) throws SQLException {
+        try
+        {
+            synchronized (agent_.connection_) {
+                if (agent_.loggingEnabled()) {
+                    agent_.logWriter_.traceEntry(this, " truncate", (int) len);
+                }
+                if (len < 0 || len > this.length()) {
+                    throw new SqlException(agent_.logWriter_,
+                        new MessageId(SQLState.INVALID_API_PARAMETER),
+                        new Long(len), "len", "Blob.truncate()");
+                }
+                if (len == this.length()) {
+                    return;
+                }
+                long newLength = (int) len + dataOffset_;
+                byte newbuf[] = new byte[(int) len + dataOffset_];
+                System.arraycopy(binaryString_, 0, newbuf, 0, (int) newLength);
+                binaryString_ = newbuf;
+                binaryStream_ = new java.io.ByteArrayInputStream(binaryString_);
+                sqlLength_ = binaryString_.length - dataOffset_;
             }
-            long newLength = (int) len + dataOffset_;
-            byte newbuf[] = new byte[(int) len + dataOffset_];
-            System.arraycopy(binaryString_, 0, newbuf, 0, (int) newLength);
-            binaryString_ = newbuf;
-            binaryStream_ = new java.io.ByteArrayInputStream(binaryString_);
-            sqlLength_ = binaryString_.length - dataOffset_;
+        }
+        catch ( SqlException se )
+        {
+            throw se.getSQLException();
         }
     }