Обсуждение: ClassCastException DelegatingPreparedStatement

Поиск
Список
Период
Сортировка

ClassCastException DelegatingPreparedStatement

От
Kevin Murphy
Дата:
I'm just getting around to testing out the advice I got from this list a
couple weeks ago about prepare thresholds (thanks, Mark & Dave).

Using code modeled after the PG JDBC "Server Prepared Statements" code
example, I'm getting this runtime error:

java.lang.ClassCastException:
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement

on the line marked with an asterisk:

            try {
                Class.forName("org.postgresql.Driver");
            } catch(Exception e) {
                printError("org.postgresql.Driver class not found in
getMedlineListFromParsedText(): ", e.getMessage());
            }
            prestmt = conn.prepareStatement(query);
  *        org.postgresql.PGStatement pgstmt =
(org.postgresql.PGStatement)prestmt;
            pgstmt.setPrepareThreshold(0);

I'm using DBCP pooled connections within tomcat.  Versions: PG 8.1,
postgresql-8.1-407.jdbc3.jar, tomcat 5.5.20, Java 1.5

My Java newbie status is hobbling me.  Thanks for any pointers.

Thanks,
Kevin


Re: ClassCastException DelegatingPreparedStatement

От
Kris Jurka
Дата:

On Tue, 2 Jan 2007, Kevin Murphy wrote:

> I'm just getting around to testing out the advice I got from this list a
> couple weeks ago about prepare thresholds (thanks, Mark & Dave).
>
> Using code modeled after the PG JDBC "Server Prepared Statements" code
> example, I'm getting this runtime error:
>
> java.lang.ClassCastException:
> org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement
>
> on the line marked with an asterisk:
>
>           try {
>               Class.forName("org.postgresql.Driver");
>           } catch(Exception e) {
>               printError("org.postgresql.Driver class not found in
> getMedlineListFromParsedText(): ", e.getMessage());
>           }
>           prestmt = conn.prepareStatement(query);
> *        org.postgresql.PGStatement pgstmt =
> (org.postgresql.PGStatement)prestmt;
>           pgstmt.setPrepareThreshold(0);
>
> I'm using DBCP pooled connections within tomcat.  Versions: PG 8.1,
> postgresql-8.1-407.jdbc3.jar, tomcat 5.5.20, Java 1.5
>

DBCP is wrapping the postgresql statement so you need to unwrap it using
something like:

Statement unwrapped =
((DelegatingPreparedStatement)prestmt).getInnermostDelegate();

org.postgresql.PGStatement pgstmt = (org.postgresql.PGStatement)unwrapped;

Kris Jurka