Re: [PATCHES] patch for ResultSet.java - Mailing list pgsql-jdbc

From Barry Lind
Subject Re: [PATCHES] patch for ResultSet.java
Date
Msg-id 3CC04940.9090209@xythos.com
Whole thread Raw
Responses Re: [PATCHES] patch for ResultSet.java  (Thomas O'Dowd <tom@nooper.com>)
Re: [PATCHES] patch for ResultSet.java  (Alexander Litvinov <lan@ac-sw.com>)
Re: [PATCHES] patch for ResultSet.java  ("Christopher Kings-Lynne" <chriskl@familyhealth.com.au>)
List pgsql-jdbc
Alexander,

Can you describe the problem you are having a little better.  I don't
understand why you are getting "1903-12-29 18:00:12.68", you should be
getting something like "1903-12-29 18:00:12.68+05"  (i.e. the timezone
offset should be returned by the server.  What is the datatype of the
column you are selecting from?

I need to better understand the cause of the problem so I can understand
the correctness of your patch.

thanks,
--Barry



Alexander Litvinov wrote:
> If I try to fetch timestamp using rs,getTimestamp("name") I got:
>
> java.lang.StringIndexOutOfBoundsException: String index out of range: 22
>         at java.lang.String.charAt(String.java(Compiled Code))
>         at org.postgresql.jdbc2.ResultSet.toTimestamp(ResultSet.java:1653)
>         at org.postgresql.jdbc2.ResultSet.getTimestamp(ResultSet.java:398)
>         at org.postgresql.jdbc2.ResultSet.getTimestamp(ResultSet.java:617)
>
> Later I tried to do rs.getString("name") I got: "1903-12-29 18:00:12.68"
>
> Using PostgreSQL v7.1.3 (JDBC from 7.2.1)
>
> I have added some bounds check to ResultSet.java. See attached patch.
>
>
> ------------------------------------------------------------------------
>
> --- src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java.original    Thu Apr 18 22:48:40 2002
> +++ src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java    Thu Apr 18 22:57:44 2002
> @@ -1641,17 +1641,22 @@
>                  int i = 19;
>                  resultSet.sbuf.setLength(i);
>
> -                char c = s.charAt(i++);
> +                char c = s.charAt(i);
>                  if (c == '.')
>                  {
>                      // Found a fractional value. Append up to 3 digits including
>                      // the leading '.'
> -                    do
> -                    {
> -                        if (i < 24)
> +                    resultSet.sbuf.append(c);
> +                    i++;
> +                    while (i < s.length() && i < 24) {
> +                        c = s.charAt(i);
> +                        if (Character.isDigit(c)) {
>                              resultSet.sbuf.append(c);
> -                        c = s.charAt(i++);
> -                    } while (Character.isDigit(c));
> +                            i++;
> +                        }
> +                        else
> +                            break;
> +                    }
>
>                      // If there wasn't at least 3 digits we should add some zeros
>                      // to make up the 3 digits we tell java to expect.
> @@ -1667,7 +1672,7 @@
>                  // prepend the GMT part and then add the remaining bit of
>                  // the string.
>                  resultSet.sbuf.append(" GMT");
> -                resultSet.sbuf.append(c);
> +//                resultSet.sbuf.append(c);
>                  resultSet.sbuf.append(s.substring(i, s.length()));
>
>                  // Lastly, if the tz part doesn't specify the :MM part then
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly



pgsql-jdbc by date:

Previous
From: Anders Bengtsson
Date:
Subject: Re: BLOB performance test FYI
Next
From: Barry Lind
Date:
Subject: Re: BLOB performance test FYI