Re: OT: easiest way to create a custom PreparedStatement
От | Mark Lewis |
---|---|
Тема | Re: OT: easiest way to create a custom PreparedStatement |
Дата | |
Msg-id | 1119990583.698.96.camel@archimedes.mirlogic.com обсуждение исходный текст |
Ответ на | Re: OT: easiest way to create a custom PreparedStatement class (Craig Servin <cservin@cromagnon.com>) |
Список | 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:
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@postgresql.org so that your > message can get through to the mailing list cleanly ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster
В списке pgsql-jdbc по дате отправления: