1 /* $Id: StatsPreparedStatement.java 94 2008-12-18 11:07:17Z dobashi $
\r
3 * (c)2004 Lavans Networks Inc. All Rights Reserved.
\r
5 package com.lavans.luz2.sql.stats;
\r
7 import java.io.InputStream;
\r
8 import java.io.Reader;
\r
9 import java.math.BigDecimal;
\r
10 import java.net.URL;
\r
11 import java.sql.Array;
\r
12 import java.sql.Blob;
\r
13 import java.sql.Clob;
\r
14 import java.sql.Date;
\r
15 import java.sql.NClob;
\r
16 import java.sql.ParameterMetaData;
\r
17 import java.sql.PreparedStatement;
\r
18 import java.sql.Ref;
\r
19 import java.sql.ResultSet;
\r
20 import java.sql.ResultSetMetaData;
\r
21 import java.sql.RowId;
\r
22 import java.sql.SQLException;
\r
23 import java.sql.SQLXML;
\r
24 import java.sql.Time;
\r
25 import java.sql.Timestamp;
\r
26 import java.util.Calendar;
\r
28 import com.lavans.luz2.sql.logging.Loggable;
\r
38 public class StatsPreparedStatement
\r
39 extends StatsStatement
\r
40 implements PreparedStatement, Loggable {
\r
43 private PreparedStatement st=null;
\r
45 /** 自クラス名。使うたびにgetName()すると遅くなるのでここで定義しておく。 */
\r
46 private static String className=StatsPreparedStatement.class.getName();
\r
51 private Statistics stat = Statistics.getInstance();
\r
56 private String logsql = null;
\r
62 public StatsPreparedStatement(PreparedStatement st, String sql) {
\r
70 * デフォルトではcon.execute()を呼び出したクラス名。
\r
71 * それよりも前のスタックのクラス名を表示したい場合は
\r
72 * ここに指定する。指定したクラス名がスタックトレース上にない場合
\r
77 public static void setClassName(String className){
\r
78 StatsPreparedStatement.className = className;
\r
82 * ログ採取用に別の文字列を使用する場合に設定する。
\r
83 * BindPreparedConnectionにおいて"?"に変換前のsqlを出力するのに使用。
\r
86 public void setLogsql(String string) {
\r
89 // 移譲先もLoggableな場合は移譲先にもlog用sqlを渡す。
\r
90 if(st instanceof Loggable){
\r
91 ((Loggable)st).setLogsql(logsql);
\r
96 * @see java.sql.PreparedStatement#executeQuery()
\r
98 public ResultSet executeQuery() throws SQLException {
\r
99 long before = System.currentTimeMillis();
\r
100 ResultSet result = st.executeQuery();
\r
101 long timecost = System.currentTimeMillis() - before;
\r
102 stat.addData(logsql,timecost, className);
\r
108 * @see java.sql.PreparedStatement#executeUpdate()
\r
110 public int executeUpdate() throws SQLException {
\r
111 long before = System.currentTimeMillis();
\r
112 int result = st.executeUpdate();
\r
113 long timecost = System.currentTimeMillis() - before;
\r
114 stat.addData(logsql,timecost, className);
\r
120 * @see java.sql.PreparedStatement#execute()
\r
122 public boolean execute() throws SQLException {
\r
123 long before = System.currentTimeMillis();
\r
124 boolean result = st.execute();
\r
125 long timecost = System.currentTimeMillis() - before;
\r
126 stat.addData(logsql,timecost, className);
\r
136 * @see java.sql.PreparedStatement#addBatch()
\r
138 public void addBatch() throws SQLException {
\r
144 * @see java.sql.PreparedStatement#clearParameters()
\r
146 public void clearParameters() throws SQLException {
\r
147 st.clearParameters();
\r
153 * @see java.sql.PreparedStatement#setByte(int, byte)
\r
155 public void setByte(int parameterIndex, byte x) throws SQLException {
\r
156 st.setByte(parameterIndex,x);
\r
160 * @see java.sql.PreparedStatement#setDouble(int, double)
\r
162 public void setDouble(int parameterIndex, double x) throws SQLException {
\r
163 st.setDouble(parameterIndex,x);
\r
167 * @see java.sql.PreparedStatement#setFloat(int, float)
\r
169 public void setFloat(int parameterIndex, float x) throws SQLException {
\r
170 st.setFloat(parameterIndex,x);
\r
174 * @see java.sql.PreparedStatement#setInt(int, int)
\r
176 public void setInt(int parameterIndex, int x) throws SQLException {
\r
177 st.setInt(parameterIndex,x);
\r
181 * @see java.sql.PreparedStatement#setNull(int, int)
\r
183 public void setNull(int parameterIndex, int sqlType) throws SQLException {
\r
184 st.setNull(parameterIndex,sqlType);
\r
188 * @see java.sql.PreparedStatement#setLong(int, long)
\r
190 public void setLong(int parameterIndex, long x) throws SQLException {
\r
191 st.setLong(parameterIndex,x);
\r
195 * @see java.sql.PreparedStatement#setShort(int, short)
\r
197 public void setShort(int parameterIndex, short x) throws SQLException {
\r
198 st.setShort(parameterIndex,x);
\r
202 * @see java.sql.PreparedStatement#setBoolean(int, boolean)
\r
204 public void setBoolean(int parameterIndex, boolean x) throws SQLException {
\r
205 st.setBoolean(parameterIndex,x);
\r
209 * @see java.sql.PreparedStatement#setBytes(int, byte[])
\r
211 public void setBytes(int parameterIndex, byte[] x) throws SQLException {
\r
212 st.setBytes(parameterIndex,x);
\r
218 * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream, int)
\r
220 public void setAsciiStream(int parameterIndex, InputStream x, int length)
\r
221 throws SQLException {
\r
222 st.setAsciiStream(parameterIndex,x,length);
\r
226 * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream, int)
\r
228 public void setBinaryStream(int parameterIndex, InputStream x, int length)
\r
229 throws SQLException {
\r
230 st.setBinaryStream(parameterIndex,x,length);
\r
234 * @see java.sql.PreparedStatement#setUnicodeStream(int, java.io.InputStream, int)
\r
237 public void setUnicodeStream(int parameterIndex, InputStream x, int length)
\r
238 throws SQLException {
\r
239 st.setUnicodeStream(parameterIndex,x,length);
\r
243 * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, int)
\r
245 public void setCharacterStream(
\r
246 int parameterIndex,
\r
249 throws SQLException {
\r
250 st.setCharacterStream(parameterIndex,reader,length);
\r
254 * @see java.sql.PreparedStatement#setObject(int, java.lang.Object)
\r
256 public void setObject(int parameterIndex, Object x) throws SQLException {
\r
257 st.setObject(parameterIndex,x);
\r
262 * @see java.sql.PreparedStatement#setObject(int, java.lang.Object, int)
\r
264 public void setObject(int parameterIndex, Object x, int targetSqlType)
\r
265 throws SQLException {
\r
266 st.setObject(parameterIndex,x,targetSqlType);
\r
270 * @see java.sql.PreparedStatement#setObject(int, java.lang.Object, int, int)
\r
272 public void setObject(
\r
273 int parameterIndex,
\r
277 throws SQLException {
\r
278 st.setObject(parameterIndex,x,targetSqlType,scale);
\r
282 * @see java.sql.PreparedStatement#setNull(int, int, java.lang.String)
\r
284 public void setNull(int paramIndex, int sqlType, String typeName)
\r
285 throws SQLException {
\r
286 st.setNull(paramIndex,sqlType,typeName);
\r
290 * @see java.sql.PreparedStatement#setString(int, java.lang.String)
\r
292 public void setString(int parameterIndex, String x) throws SQLException {
\r
293 st.setString(parameterIndex,x);
\r
297 * @see java.sql.PreparedStatement#setBigDecimal(int, java.math.BigDecimal)
\r
299 public void setBigDecimal(int parameterIndex, BigDecimal x)
\r
300 throws SQLException {
\r
301 st.setBigDecimal(parameterIndex,x);
\r
306 * @see java.sql.PreparedStatement#setURL(int, java.net.URL)
\r
308 public void setURL(int parameterIndex, URL x) throws SQLException {
\r
309 st.setURL(parameterIndex,x);
\r
313 * @see java.sql.PreparedStatement#setArray(int, java.sql.Array)
\r
315 public void setArray(int i, Array x) throws SQLException {
\r
320 * @see java.sql.PreparedStatement#setBlob(int, java.sql.Blob)
\r
322 public void setBlob(int i, Blob x) throws SQLException {
\r
327 * @see java.sql.PreparedStatement#setClob(int, java.sql.Clob)
\r
329 public void setClob(int i, Clob x) throws SQLException {
\r
334 * @see java.sql.PreparedStatement#setDate(int, java.sql.Date)
\r
336 public void setDate(int parameterIndex, Date x) throws SQLException {
\r
337 st.setDate(parameterIndex,x);
\r
343 * @see java.sql.PreparedStatement#getParameterMetaData()
\r
345 public ParameterMetaData getParameterMetaData() throws SQLException {
\r
346 return st.getParameterMetaData();
\r
350 * @see java.sql.PreparedStatement#setRef(int, java.sql.Ref)
\r
352 public void setRef(int i, Ref x) throws SQLException {
\r
358 * @see java.sql.PreparedStatement#getMetaData()
\r
360 public ResultSetMetaData getMetaData() throws SQLException {
\r
361 return st.getMetaData();
\r
365 * @see java.sql.PreparedStatement#setTime(int, java.sql.Time)
\r
367 public void setTime(int parameterIndex, Time x) throws SQLException {
\r
368 st.setTime(parameterIndex,x);
\r
372 * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp)
\r
374 public void setTimestamp(int parameterIndex, Timestamp x)
\r
375 throws SQLException {
\r
376 st.setTimestamp(parameterIndex,x);
\r
380 * @see java.sql.PreparedStatement#setDate(int, java.sql.Date, java.util.Calendar)
\r
382 public void setDate(int parameterIndex, Date x, Calendar cal)
\r
383 throws SQLException {
\r
384 st.setDate(parameterIndex,x);
\r
388 * @see java.sql.PreparedStatement#setTime(int, java.sql.Time, java.util.Calendar)
\r
390 public void setTime(int parameterIndex, Time x, Calendar cal)
\r
391 throws SQLException {
\r
392 st.setTime(parameterIndex,x,cal);
\r
396 * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp, java.util.Calendar)
\r
398 public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
\r
399 throws SQLException {
\r
400 st.setTimestamp(parameterIndex,x,cal);
\r
404 * @param parameterIndex
\r
407 * @throws SQLException
\r
408 * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream, long)
\r
410 public void setAsciiStream(int parameterIndex, InputStream x, long length)
\r
411 throws SQLException {
\r
412 st.setAsciiStream(parameterIndex, x, length);
\r
416 * @param parameterIndex
\r
418 * @throws SQLException
\r
419 * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream)
\r
421 public void setAsciiStream(int parameterIndex, InputStream x)
\r
422 throws SQLException {
\r
423 st.setAsciiStream(parameterIndex, x);
\r
427 * @param parameterIndex
\r
430 * @throws SQLException
\r
431 * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream, long)
\r
433 public void setBinaryStream(int parameterIndex, InputStream x, long length)
\r
434 throws SQLException {
\r
435 st.setBinaryStream(parameterIndex, x, length);
\r
439 * @param parameterIndex
\r
441 * @throws SQLException
\r
442 * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream)
\r
444 public void setBinaryStream(int parameterIndex, InputStream x)
\r
445 throws SQLException {
\r
446 st.setBinaryStream(parameterIndex, x);
\r
450 * @param parameterIndex
\r
451 * @param inputStream
\r
453 * @throws SQLException
\r
454 * @see java.sql.PreparedStatement#setBlob(int, java.io.InputStream, long)
\r
456 public void setBlob(int parameterIndex, InputStream inputStream, long length)
\r
457 throws SQLException {
\r
458 st.setBlob(parameterIndex, inputStream, length);
\r
462 * @param parameterIndex
\r
463 * @param inputStream
\r
464 * @throws SQLException
\r
465 * @see java.sql.PreparedStatement#setBlob(int, java.io.InputStream)
\r
467 public void setBlob(int parameterIndex, InputStream inputStream)
\r
468 throws SQLException {
\r
469 st.setBlob(parameterIndex, inputStream);
\r
473 * @param parameterIndex
\r
476 * @throws SQLException
\r
477 * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, long)
\r
479 public void setCharacterStream(int parameterIndex, Reader reader,
\r
480 long length) throws SQLException {
\r
481 st.setCharacterStream(parameterIndex, reader, length);
\r
485 * @param parameterIndex
\r
487 * @throws SQLException
\r
488 * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader)
\r
490 public void setCharacterStream(int parameterIndex, Reader reader)
\r
491 throws SQLException {
\r
492 st.setCharacterStream(parameterIndex, reader);
\r
496 * @param parameterIndex
\r
499 * @throws SQLException
\r
500 * @see java.sql.PreparedStatement#setClob(int, java.io.Reader, long)
\r
502 public void setClob(int parameterIndex, Reader reader, long length)
\r
503 throws SQLException {
\r
504 st.setClob(parameterIndex, reader, length);
\r
508 * @param parameterIndex
\r
510 * @throws SQLException
\r
511 * @see java.sql.PreparedStatement#setClob(int, java.io.Reader)
\r
513 public void setClob(int parameterIndex, Reader reader) throws SQLException {
\r
514 st.setClob(parameterIndex, reader);
\r
518 * @param parameterIndex
\r
521 * @throws SQLException
\r
522 * @see java.sql.PreparedStatement#setNCharacterStream(int, java.io.Reader, long)
\r
524 public void setNCharacterStream(int parameterIndex, Reader value,
\r
525 long length) throws SQLException {
\r
526 st.setNCharacterStream(parameterIndex, value, length);
\r
530 * @param parameterIndex
\r
532 * @throws SQLException
\r
533 * @see java.sql.PreparedStatement#setNCharacterStream(int, java.io.Reader)
\r
535 public void setNCharacterStream(int parameterIndex, Reader value)
\r
536 throws SQLException {
\r
537 st.setNCharacterStream(parameterIndex, value);
\r
541 * @param parameterIndex
\r
543 * @throws SQLException
\r
544 * @see java.sql.PreparedStatement#setNClob(int, java.sql.NClob)
\r
546 public void setNClob(int parameterIndex, NClob value) throws SQLException {
\r
547 st.setNClob(parameterIndex, value);
\r
551 * @param parameterIndex
\r
554 * @throws SQLException
\r
555 * @see java.sql.PreparedStatement#setNClob(int, java.io.Reader, long)
\r
557 public void setNClob(int parameterIndex, Reader reader, long length)
\r
558 throws SQLException {
\r
559 st.setNClob(parameterIndex, reader, length);
\r
563 * @param parameterIndex
\r
565 * @throws SQLException
\r
566 * @see java.sql.PreparedStatement#setNClob(int, java.io.Reader)
\r
568 public void setNClob(int parameterIndex, Reader reader) throws SQLException {
\r
569 st.setNClob(parameterIndex, reader);
\r
573 * @param parameterIndex
\r
575 * @throws SQLException
\r
576 * @see java.sql.PreparedStatement#setNString(int, java.lang.String)
\r
578 public void setNString(int parameterIndex, String value)
\r
579 throws SQLException {
\r
580 st.setNString(parameterIndex, value);
\r
584 * @param parameterIndex
\r
586 * @throws SQLException
\r
587 * @see java.sql.PreparedStatement#setRowId(int, java.sql.RowId)
\r
589 public void setRowId(int parameterIndex, RowId x) throws SQLException {
\r
590 st.setRowId(parameterIndex, x);
\r
594 * @param parameterIndex
\r
596 * @throws SQLException
\r
597 * @see java.sql.PreparedStatement#setSQLXML(int, java.sql.SQLXML)
\r
599 public void setSQLXML(int parameterIndex, SQLXML xmlObject)
\r
600 throws SQLException {
\r
601 st.setSQLXML(parameterIndex, xmlObject);
\r
607 * @throws SQLException
\r
608 * @see java.sql.Wrapper#isWrapperFor(java.lang.Class)
\r
611 public boolean isWrapperFor(Class<?> iface) throws SQLException {
\r
612 return st.isWrapperFor(iface);
\r
619 * @throws SQLException
\r
620 * @see java.sql.Wrapper#unwrap(java.lang.Class)
\r
623 @SuppressWarnings("unchecked")
\r
624 public <T> T unwrap(Class<T> iface) throws SQLException {
\r