Re: OT: easiest way to create a custom PreparedStatement

From: Mark Lewis <mark(dot)lewis(at)mir3(dot)com>
To: Kevin Murphy <murphy(at)genome(dot)chop(dot)edu>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: OT: easiest way to create a custom PreparedStatement
Date: 2005-06-28 20:29:42
Message-ID: 1119990583.698.96.camel@archimedes.mirlogic.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

We use java.lang.reflect.Proxy in our production systems to do things
like log SQL statements, do a little bookkeeping for application-level
replication, log timings and the like. Works great.

Here's a snippet that we use to wrap a PreparedStatement with a proxy to
do some logging every time somebody calls any method on it.

-- Mark Lewis

final PreparedStatement realStatement = xxx;

PreparedStatement debugWrapped =
(PreparedStatement)Proxy.newProxyInstance(getClass().getClassLoader(),
new Class[]{PreparedStatement.class}, new InvocationHandler() {
public Object invoke(Object instance, Method method, Object
[] params) throws Throwable {
StringBuffer buf = new StringBuffer();
buf.append("Called ").append(method.getName());
buf.append('(');
if(params != null) {
for(int i=0; i<params.length; i++) {
if(i > 0) buf.append(',');
buf.append(String.valueOf(params[i]));
}
}
buf.append(')');
log.debug(buf);
try {
return method.invoke(realStatement, params);
}
catch(InvocationTargetException ex) {
throw ex.getCause();
}
}
});

On Tue, 2005-06-28 at 14:55 -0500, Craig Servin wrote:

> Or you could use:
>
> java.lang.reflect.Proxy
>
>
> On Tuesday 28 June 2005 01:55 pm, Kevin Murphy wrote:
> > I am modifying some existing data loading code (that only makes use of 4
> > or 5 methods from PreparedStatement) to optionally be able to *not*
> > connect to a database but instead dump either the generated SQL code or
> > the raw insert data to files on the file system.
> >
> > It would be great if I could just overload PreparedStatement with my own
> > classes, but unfortunately it is an interface, so I presumably need to
> > implement stubs for the umpty-ump methods defined by PreparedStatement?
> >
> > Is this true, and if so, what is the easiest/fastest way to do this (if
> > it is even possible)?
> >
> > I am a java newbie, by the way. Don't flame me too hard. I did say
> > "OT", after all ;-)
> >
> > Thanks,
> > Kevin
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 3: if posting/reading through Usenet, please send an appropriate
> > subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> > message can get through to the mailing list cleanly
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2005-06-28 20:43:30 Re: prepared statement incompatibility
Previous Message Byron Nikolaidis 2005-06-28 20:25:25 prepared statement incompatibility