You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Jose de Castro <jo...@voxeo.com> on 2006/11/01 21:25:13 UTC

NPE in setTimestamp(int,Timestamp,Calendar)

A NullPointerException occurs if you pass in a null Timestamp into
org.apache.derby.client.am.PreparedStatement.setTimestamp(int,Timestamp,Cale
ndar)

 

Does anyone know if this is being addressed in 10.3? I have included a
suggested fix. Is this something I should add to JIRA?

 

    public void setTimestamp(int parameterIndex,

                             java.sql.Timestamp x,

                             java.util.Calendar calendar) throws
SQLException {

        try

        {

            synchronized (connection_) {

                if (agent_.loggingEnabled()) {

                    agent_.logWriter_.traceEntry(this, "setTimestamp",
parameterIndex, x, calendar);

                }

                checkForClosedStatement();

+               if (x == null) {

+                 setTimestamp(parameterIndex,null);

+               }

+               else {

                       if (calendar == null) {

                           throw new SqlException(agent_.logWriter_, 

                               new
ClientMessageId(SQLState.INVALID_API_PARAMETER),

                               "null", "calendar", "setTimestamp()");

                       }

                       java.util.Calendar targetCalendar =
java.util.Calendar.getInstance(calendar.getTimeZone());

                       targetCalendar.clear();

                       targetCalendar.setTime(x);

                       java.util.Calendar defaultCalendar =
java.util.Calendar.getInstance();

                       defaultCalendar.clear();

                       defaultCalendar.setTime(x);

                       long timeZoneOffset =

 
targetCalendar.get(java.util.Calendar.ZONE_OFFSET) -
defaultCalendar.get(java.util.Calendar.ZONE_OFFSET) +

 
targetCalendar.get(java.util.Calendar.DST_OFFSET) -
defaultCalendar.get(java.util.Calendar.DST_OFFSET);

                       java.sql.Timestamp adjustedTimestamp =
((timeZoneOffset == 0) || (x == null)) ? x : new
java.sql.Timestamp(x.getTime() + timeZoneOffset);

                       if (x != null) {

                           adjustedTimestamp.setNanos(x.getNanos());

                       }

                       setTimestamp(parameterIndex, adjustedTimestamp);

+                }

            }

        }

        catch ( SqlException se )

        {

            throw se.getSQLException();

        }

    }  


Re: NPE in setTimestamp(int,Timestamp,Calendar)

Posted by Daniel John Debrunner <dj...@apache.org>.
Jose de Castro wrote:
> A NullPointerException occurs if you pass in a null Timestamp into 
> org.apache.derby.client.am.PreparedStatement.setTimestamp(int,Timestamp,Calendar)
> 
>  
> 
> Does anyone know if this is being addressed in 10.3? I have included a 
> suggested fix. Is this something I should add to JIRA?

Please enter a Jira bug and please attach a patch to that issue.

Thanks,
Dan.