Re: [JDBC] Prepared statement performance... - Mailing list pgsql-general

From Barry Lind
Subject Re: [JDBC] Prepared statement performance...
Date
Msg-id 3D94BCC8.30909@xythos.com
Whole thread Raw
In response to Prepared statement performance...  (Dmitry Tkach <dmitry@openratings.com>)
List pgsql-general

Dmitry Tkach wrote:


> True... But how does PreparedStatement.setTimestamp () help here?
> All it does (at least in 7.2) is Timestamp.toString () :-)
>

Huh?  In 7.3 setTimestamp() is much more than Timestamp.toString() (and
in 7.2 it was as well, I think you need to go back to 7.1 for it to be
as simple as you describe).

    public void setTimestamp(int parameterIndex, Timestamp x) throws
SQLException
    {
        if (null == x)
        {
            setNull(parameterIndex, Types.OTHER);
        }
        else
        {
            // Use the shared StringBuffer
            synchronized (sbuf)
            {
                sbuf.setLength(0);
                sbuf.ensureCapacity(32);
                sbuf.append("'");
                //format the timestamp
                //we do our own formating so that we can get a format
                //that works with both timestamp with time zone and
                //timestamp without time zone datatypes.
                //The format is '2002-01-01 23:59:59.123456-0130'
                //we need to include the local time and timezone offset
                //so that timestamp without time zone works correctly
                int l_year = x.getYear() + 1900;
                sbuf.append(l_year);
                sbuf.append('-');
                int l_month = x.getMonth() + 1;
                if (l_month < 10)
                    sbuf.append('0');
                sbuf.append(l_month);
                sbuf.append('-');
                int l_day = x.getDate();
                if (l_day < 10)
                    sbuf.append('0');
                sbuf.append(l_day);
                sbuf.append(' ');
                int l_hours = x.getHours();
                if (l_hours < 10)
                    sbuf.append('0');
                sbuf.append(l_hours);
                sbuf.append(':');
                int l_minutes = x.getMinutes();
                if (l_minutes < 10)
                    sbuf.append('0');
                sbuf.append(l_minutes);
                sbuf.append(':');
                int l_seconds = x.getSeconds();
                if (l_seconds < 10)
                    sbuf.append('0');
                sbuf.append(l_seconds);
                // Make decimal from nanos.
                char[] l_decimal = {'0', '0', '0', '0', '0', '0', '0', '0', '0'};
                char[] l_nanos = Integer.toString(x.getNanos()).toCharArray();
                System.arraycopy(l_nanos, 0, l_decimal, l_decimal.length -
l_nanos.length, l_nanos.length);
                sbuf.append('.');
                if (connection.haveMinimumServerVersion("7.2"))
                {
                    sbuf.append(l_decimal, 0, 6);
                }
                else
                {
                    // Because 7.1 include bug that "hh:mm:59.999" becomes "hh:mm:60.00".
                    sbuf.append(l_decimal, 0, 2);
                }
                //add timezone offset
                int l_offset = -(x.getTimezoneOffset());
                int l_houros = l_offset / 60;
                if (l_houros >= 0)
                {
                    sbuf.append('+');
                }
                else
                {
                    sbuf.append('-');
                }
                if (l_houros > -10 && l_houros < 10)
                    sbuf.append('0');
                if (l_houros >= 0)
                {
                    sbuf.append(l_houros);
                }
                else
                {
                    sbuf.append( -l_houros);
                }
                int l_minos = l_offset - (l_houros * 60);
                if (l_minos != 0)
                {
                    if (l_minos < 10)
                        sbuf.append('0');
                    sbuf.append(l_minos);
                }
                sbuf.append("'");
                bind(parameterIndex, sbuf.toString(), PG_TIMESTAMPTZ);
            }

        }
    }



pgsql-general by date:

Previous
From: Barry Lind
Date:
Subject: Re: [JDBC] Prepared statement performance...
Next
From: Lamar Owen
Date:
Subject: Re: 7.0 -> 7.2 Migration (oops)