OSDN Git Service

import
[luz/luz.git] / luz2 / src / com / lavans / luz2 / sql / stats / StatsPreparedStatement.java
1 /* $Id: StatsPreparedStatement.java 94 2008-12-18 11:07:17Z dobashi $\r
2  * create: 2004/07/27\r
3  * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
4  */\r
5 package com.lavans.luz2.sql.stats;\r
6 \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
27 \r
28 import com.lavans.luz2.sql.logging.Loggable;\r
29 \r
30 /**\r
31  * @author dobashi\r
32  * @version 1.00\r
33  */\r
34 /**\r
35  * @author Yuki\r
36  *\r
37  */\r
38 public class StatsPreparedStatement\r
39         extends StatsStatement\r
40         implements PreparedStatement, Loggable {\r
41 \r
42         /** 処理移譲先。 */\r
43         private PreparedStatement st=null;\r
44 \r
45         /** 自クラス名。使うたびにgetName()すると遅くなるのでここで定義しておく。 */\r
46         private static String className=StatsPreparedStatement.class.getName();\r
47 \r
48         /**\r
49          * 統計採取クラス。\r
50          */\r
51         private Statistics stat = Statistics.getInstance();\r
52 \r
53         /**\r
54          * ログを採るSQL文。\r
55          */\r
56         private String logsql = null;\r
57 \r
58         /**\r
59          * コンストラクタ。\r
60          * @param st\r
61          */\r
62         public StatsPreparedStatement(PreparedStatement st, String sql) {\r
63                 super(st);\r
64                 this.st  = st;\r
65                 this.logsql = sql;\r
66         }\r
67         \r
68         /**\r
69          * 呼び出し元クラス名の変更。\r
70          * デフォルトではcon.execute()を呼び出したクラス名。\r
71          * それよりも前のスタックのクラス名を表示したい場合は\r
72          * ここに指定する。指定したクラス名がスタックトレース上にない場合\r
73          * うまく取得できなくなるので注意。\r
74          * \r
75          * @param className\r
76          */\r
77         public static void setClassName(String className){\r
78                 StatsPreparedStatement.className = className;\r
79         }\r
80         \r
81         /**\r
82          * ログ採取用に別の文字列を使用する場合に設定する。\r
83          * BindPreparedConnectionにおいて"?"に変換前のsqlを出力するのに使用。\r
84          * @param string\r
85          */\r
86         public void setLogsql(String string) {\r
87                 logsql = string;\r
88 \r
89                 // 移譲先もLoggableな場合は移譲先にもlog用sqlを渡す。\r
90                 if(st instanceof Loggable){\r
91                         ((Loggable)st).setLogsql(logsql);\r
92                 }\r
93         }\r
94 \r
95         /* (非 Javadoc)\r
96          * @see java.sql.PreparedStatement#executeQuery()\r
97          */\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
103 \r
104                 return result;\r
105         }\r
106 \r
107         /* (非 Javadoc)\r
108          * @see java.sql.PreparedStatement#executeUpdate()\r
109          */\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
115 \r
116                 return result;\r
117         }\r
118 \r
119         /* (非 Javadoc)\r
120          * @see java.sql.PreparedStatement#execute()\r
121          */\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
127 \r
128                 return result;\r
129         }\r
130 \r
131 \r
132 \r
133 \r
134 \r
135         /* (非 Javadoc)\r
136          * @see java.sql.PreparedStatement#addBatch()\r
137          */\r
138         public void addBatch() throws SQLException {\r
139                 st.addBatch();\r
140 \r
141         }\r
142 \r
143         /* (非 Javadoc)\r
144          * @see java.sql.PreparedStatement#clearParameters()\r
145          */\r
146         public void clearParameters() throws SQLException {\r
147                 st.clearParameters();\r
148 \r
149         }\r
150 \r
151 \r
152         /* (非 Javadoc)\r
153          * @see java.sql.PreparedStatement#setByte(int, byte)\r
154          */\r
155         public void setByte(int parameterIndex, byte x) throws SQLException {\r
156                 st.setByte(parameterIndex,x);\r
157         }\r
158 \r
159         /* (非 Javadoc)\r
160          * @see java.sql.PreparedStatement#setDouble(int, double)\r
161          */\r
162         public void setDouble(int parameterIndex, double x) throws SQLException {\r
163                 st.setDouble(parameterIndex,x);\r
164         }\r
165 \r
166         /* (非 Javadoc)\r
167          * @see java.sql.PreparedStatement#setFloat(int, float)\r
168          */\r
169         public void setFloat(int parameterIndex, float x) throws SQLException {\r
170                 st.setFloat(parameterIndex,x);\r
171         }\r
172 \r
173         /* (非 Javadoc)\r
174          * @see java.sql.PreparedStatement#setInt(int, int)\r
175          */\r
176         public void setInt(int parameterIndex, int x) throws SQLException {\r
177                 st.setInt(parameterIndex,x);\r
178         }\r
179 \r
180         /* (非 Javadoc)\r
181          * @see java.sql.PreparedStatement#setNull(int, int)\r
182          */\r
183         public void setNull(int parameterIndex, int sqlType) throws SQLException {\r
184                 st.setNull(parameterIndex,sqlType);\r
185         }\r
186 \r
187         /* (非 Javadoc)\r
188          * @see java.sql.PreparedStatement#setLong(int, long)\r
189          */\r
190         public void setLong(int parameterIndex, long x) throws SQLException {\r
191                 st.setLong(parameterIndex,x);\r
192         }\r
193 \r
194         /* (非 Javadoc)\r
195          * @see java.sql.PreparedStatement#setShort(int, short)\r
196          */\r
197         public void setShort(int parameterIndex, short x) throws SQLException {\r
198                 st.setShort(parameterIndex,x);\r
199         }\r
200 \r
201         /* (非 Javadoc)\r
202          * @see java.sql.PreparedStatement#setBoolean(int, boolean)\r
203          */\r
204         public void setBoolean(int parameterIndex, boolean x) throws SQLException {\r
205                 st.setBoolean(parameterIndex,x);\r
206         }\r
207 \r
208         /* (非 Javadoc)\r
209          * @see java.sql.PreparedStatement#setBytes(int, byte[])\r
210          */\r
211         public void setBytes(int parameterIndex, byte[] x) throws SQLException {\r
212                 st.setBytes(parameterIndex,x);\r
213         }\r
214 \r
215 \r
216 \r
217         /* (非 Javadoc)\r
218          * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream, int)\r
219          */\r
220         public void setAsciiStream(int parameterIndex, InputStream x, int length)\r
221                 throws SQLException {\r
222                 st.setAsciiStream(parameterIndex,x,length);\r
223         }\r
224 \r
225         /* (非 Javadoc)\r
226          * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream, int)\r
227          */\r
228         public void setBinaryStream(int parameterIndex, InputStream x, int length)\r
229                 throws SQLException {\r
230                 st.setBinaryStream(parameterIndex,x,length);\r
231         }\r
232 \r
233         /**\r
234          * @see java.sql.PreparedStatement#setUnicodeStream(int, java.io.InputStream, int)\r
235          * @deprecated\r
236          */\r
237         public  void setUnicodeStream(int parameterIndex, InputStream x, int length)\r
238                 throws SQLException {\r
239                 st.setUnicodeStream(parameterIndex,x,length);\r
240         }\r
241 \r
242         /* (非 Javadoc)\r
243          * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, int)\r
244          */\r
245         public void setCharacterStream(\r
246                 int parameterIndex,\r
247                 Reader reader,\r
248                 int length)\r
249                 throws SQLException {\r
250                 st.setCharacterStream(parameterIndex,reader,length);\r
251         }\r
252 \r
253         /* (非 Javadoc)\r
254          * @see java.sql.PreparedStatement#setObject(int, java.lang.Object)\r
255          */\r
256         public void setObject(int parameterIndex, Object x) throws SQLException {\r
257                 st.setObject(parameterIndex,x);\r
258 \r
259         }\r
260 \r
261         /* (非 Javadoc)\r
262          * @see java.sql.PreparedStatement#setObject(int, java.lang.Object, int)\r
263          */\r
264         public void setObject(int parameterIndex, Object x, int targetSqlType)\r
265                 throws SQLException {\r
266                 st.setObject(parameterIndex,x,targetSqlType);\r
267         }\r
268 \r
269         /* (非 Javadoc)\r
270          * @see java.sql.PreparedStatement#setObject(int, java.lang.Object, int, int)\r
271          */\r
272         public void setObject(\r
273                 int parameterIndex,\r
274                 Object x,\r
275                 int targetSqlType,\r
276                 int scale)\r
277                 throws SQLException {\r
278                 st.setObject(parameterIndex,x,targetSqlType,scale);\r
279         }\r
280 \r
281         /* (非 Javadoc)\r
282          * @see java.sql.PreparedStatement#setNull(int, int, java.lang.String)\r
283          */\r
284         public void setNull(int paramIndex, int sqlType, String typeName)\r
285                 throws SQLException {\r
286                 st.setNull(paramIndex,sqlType,typeName);\r
287         }\r
288 \r
289         /* (非 Javadoc)\r
290          * @see java.sql.PreparedStatement#setString(int, java.lang.String)\r
291          */\r
292         public void setString(int parameterIndex, String x) throws SQLException {\r
293                 st.setString(parameterIndex,x);\r
294         }\r
295 \r
296         /* (非 Javadoc)\r
297          * @see java.sql.PreparedStatement#setBigDecimal(int, java.math.BigDecimal)\r
298          */\r
299         public void setBigDecimal(int parameterIndex, BigDecimal x)\r
300                 throws SQLException {\r
301                 st.setBigDecimal(parameterIndex,x);\r
302         }\r
303 \r
304 \r
305         /* (非 Javadoc)\r
306          * @see java.sql.PreparedStatement#setURL(int, java.net.URL)\r
307          */\r
308         public void setURL(int parameterIndex, URL x) throws SQLException {\r
309                 st.setURL(parameterIndex,x);\r
310         }\r
311 \r
312         /* (非 Javadoc)\r
313          * @see java.sql.PreparedStatement#setArray(int, java.sql.Array)\r
314          */\r
315         public void setArray(int i, Array x) throws SQLException {\r
316                 st.setArray(i,x);\r
317         }\r
318 \r
319         /* (非 Javadoc)\r
320          * @see java.sql.PreparedStatement#setBlob(int, java.sql.Blob)\r
321          */\r
322         public void setBlob(int i, Blob x) throws SQLException {\r
323                 st.setBlob(i,x);\r
324         }\r
325 \r
326         /* (非 Javadoc)\r
327          * @see java.sql.PreparedStatement#setClob(int, java.sql.Clob)\r
328          */\r
329         public void setClob(int i, Clob x) throws SQLException {\r
330                 st.setClob(i,x);\r
331         }\r
332 \r
333         /* (非 Javadoc)\r
334          * @see java.sql.PreparedStatement#setDate(int, java.sql.Date)\r
335          */\r
336         public void setDate(int parameterIndex, Date x) throws SQLException {\r
337                 st.setDate(parameterIndex,x);\r
338 \r
339         }\r
340 \r
341 \r
342         /* (非 Javadoc)\r
343          * @see java.sql.PreparedStatement#getParameterMetaData()\r
344          */\r
345         public ParameterMetaData getParameterMetaData() throws SQLException {\r
346                 return st.getParameterMetaData();\r
347         }\r
348 \r
349         /* (非 Javadoc)\r
350          * @see java.sql.PreparedStatement#setRef(int, java.sql.Ref)\r
351          */\r
352         public void setRef(int i, Ref x) throws SQLException {\r
353                 st.setRef(i,x);\r
354         }\r
355 \r
356 \r
357         /* (非 Javadoc)\r
358          * @see java.sql.PreparedStatement#getMetaData()\r
359          */\r
360         public ResultSetMetaData getMetaData() throws SQLException {\r
361                 return st.getMetaData();\r
362         }\r
363 \r
364         /* (非 Javadoc)\r
365          * @see java.sql.PreparedStatement#setTime(int, java.sql.Time)\r
366          */\r
367         public void setTime(int parameterIndex, Time x) throws SQLException {\r
368                 st.setTime(parameterIndex,x);\r
369         }\r
370 \r
371         /* (非 Javadoc)\r
372          * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp)\r
373          */\r
374         public void setTimestamp(int parameterIndex, Timestamp x)\r
375                 throws SQLException {\r
376                 st.setTimestamp(parameterIndex,x);\r
377         }\r
378 \r
379         /* (非 Javadoc)\r
380          * @see java.sql.PreparedStatement#setDate(int, java.sql.Date, java.util.Calendar)\r
381          */\r
382         public void setDate(int parameterIndex, Date x, Calendar cal)\r
383                 throws SQLException {\r
384                 st.setDate(parameterIndex,x);\r
385         }\r
386 \r
387         /* (非 Javadoc)\r
388          * @see java.sql.PreparedStatement#setTime(int, java.sql.Time, java.util.Calendar)\r
389          */\r
390         public void setTime(int parameterIndex, Time x, Calendar cal)\r
391                 throws SQLException {\r
392                 st.setTime(parameterIndex,x,cal);\r
393         }\r
394 \r
395         /* (非 Javadoc)\r
396          * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp, java.util.Calendar)\r
397          */\r
398         public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal)\r
399                 throws SQLException {\r
400                 st.setTimestamp(parameterIndex,x,cal);\r
401         }\r
402 \r
403         /**\r
404          * @param parameterIndex\r
405          * @param x\r
406          * @param length\r
407          * @throws SQLException\r
408          * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream, long)\r
409          */\r
410         public void setAsciiStream(int parameterIndex, InputStream x, long length)\r
411                         throws SQLException {\r
412                 st.setAsciiStream(parameterIndex, x, length);\r
413         }\r
414 \r
415         /**\r
416          * @param parameterIndex\r
417          * @param x\r
418          * @throws SQLException\r
419          * @see java.sql.PreparedStatement#setAsciiStream(int, java.io.InputStream)\r
420          */\r
421         public void setAsciiStream(int parameterIndex, InputStream x)\r
422                         throws SQLException {\r
423                 st.setAsciiStream(parameterIndex, x);\r
424         }\r
425 \r
426         /**\r
427          * @param parameterIndex\r
428          * @param x\r
429          * @param length\r
430          * @throws SQLException\r
431          * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream, long)\r
432          */\r
433         public void setBinaryStream(int parameterIndex, InputStream x, long length)\r
434                         throws SQLException {\r
435                 st.setBinaryStream(parameterIndex, x, length);\r
436         }\r
437 \r
438         /**\r
439          * @param parameterIndex\r
440          * @param x\r
441          * @throws SQLException\r
442          * @see java.sql.PreparedStatement#setBinaryStream(int, java.io.InputStream)\r
443          */\r
444         public void setBinaryStream(int parameterIndex, InputStream x)\r
445                         throws SQLException {\r
446                 st.setBinaryStream(parameterIndex, x);\r
447         }\r
448 \r
449         /**\r
450          * @param parameterIndex\r
451          * @param inputStream\r
452          * @param length\r
453          * @throws SQLException\r
454          * @see java.sql.PreparedStatement#setBlob(int, java.io.InputStream, long)\r
455          */\r
456         public void setBlob(int parameterIndex, InputStream inputStream, long length)\r
457                         throws SQLException {\r
458                 st.setBlob(parameterIndex, inputStream, length);\r
459         }\r
460 \r
461         /**\r
462          * @param parameterIndex\r
463          * @param inputStream\r
464          * @throws SQLException\r
465          * @see java.sql.PreparedStatement#setBlob(int, java.io.InputStream)\r
466          */\r
467         public void setBlob(int parameterIndex, InputStream inputStream)\r
468                         throws SQLException {\r
469                 st.setBlob(parameterIndex, inputStream);\r
470         }\r
471 \r
472         /**\r
473          * @param parameterIndex\r
474          * @param reader\r
475          * @param length\r
476          * @throws SQLException\r
477          * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader, long)\r
478          */\r
479         public void setCharacterStream(int parameterIndex, Reader reader,\r
480                         long length) throws SQLException {\r
481                 st.setCharacterStream(parameterIndex, reader, length);\r
482         }\r
483 \r
484         /**\r
485          * @param parameterIndex\r
486          * @param reader\r
487          * @throws SQLException\r
488          * @see java.sql.PreparedStatement#setCharacterStream(int, java.io.Reader)\r
489          */\r
490         public void setCharacterStream(int parameterIndex, Reader reader)\r
491                         throws SQLException {\r
492                 st.setCharacterStream(parameterIndex, reader);\r
493         }\r
494 \r
495         /**\r
496          * @param parameterIndex\r
497          * @param reader\r
498          * @param length\r
499          * @throws SQLException\r
500          * @see java.sql.PreparedStatement#setClob(int, java.io.Reader, long)\r
501          */\r
502         public void setClob(int parameterIndex, Reader reader, long length)\r
503                         throws SQLException {\r
504                 st.setClob(parameterIndex, reader, length);\r
505         }\r
506 \r
507         /**\r
508          * @param parameterIndex\r
509          * @param reader\r
510          * @throws SQLException\r
511          * @see java.sql.PreparedStatement#setClob(int, java.io.Reader)\r
512          */\r
513         public void setClob(int parameterIndex, Reader reader) throws SQLException {\r
514                 st.setClob(parameterIndex, reader);\r
515         }\r
516 \r
517         /**\r
518          * @param parameterIndex\r
519          * @param value\r
520          * @param length\r
521          * @throws SQLException\r
522          * @see java.sql.PreparedStatement#setNCharacterStream(int, java.io.Reader, long)\r
523          */\r
524         public void setNCharacterStream(int parameterIndex, Reader value,\r
525                         long length) throws SQLException {\r
526                 st.setNCharacterStream(parameterIndex, value, length);\r
527         }\r
528 \r
529         /**\r
530          * @param parameterIndex\r
531          * @param value\r
532          * @throws SQLException\r
533          * @see java.sql.PreparedStatement#setNCharacterStream(int, java.io.Reader)\r
534          */\r
535         public void setNCharacterStream(int parameterIndex, Reader value)\r
536                         throws SQLException {\r
537                 st.setNCharacterStream(parameterIndex, value);\r
538         }\r
539 \r
540         /**\r
541          * @param parameterIndex\r
542          * @param value\r
543          * @throws SQLException\r
544          * @see java.sql.PreparedStatement#setNClob(int, java.sql.NClob)\r
545          */\r
546         public void setNClob(int parameterIndex, NClob value) throws SQLException {\r
547                 st.setNClob(parameterIndex, value);\r
548         }\r
549 \r
550         /**\r
551          * @param parameterIndex\r
552          * @param reader\r
553          * @param length\r
554          * @throws SQLException\r
555          * @see java.sql.PreparedStatement#setNClob(int, java.io.Reader, long)\r
556          */\r
557         public void setNClob(int parameterIndex, Reader reader, long length)\r
558                         throws SQLException {\r
559                 st.setNClob(parameterIndex, reader, length);\r
560         }\r
561 \r
562         /**\r
563          * @param parameterIndex\r
564          * @param reader\r
565          * @throws SQLException\r
566          * @see java.sql.PreparedStatement#setNClob(int, java.io.Reader)\r
567          */\r
568         public void setNClob(int parameterIndex, Reader reader) throws SQLException {\r
569                 st.setNClob(parameterIndex, reader);\r
570         }\r
571 \r
572         /**\r
573          * @param parameterIndex\r
574          * @param value\r
575          * @throws SQLException\r
576          * @see java.sql.PreparedStatement#setNString(int, java.lang.String)\r
577          */\r
578         public void setNString(int parameterIndex, String value)\r
579                         throws SQLException {\r
580                 st.setNString(parameterIndex, value);\r
581         }\r
582 \r
583         /**\r
584          * @param parameterIndex\r
585          * @param x\r
586          * @throws SQLException\r
587          * @see java.sql.PreparedStatement#setRowId(int, java.sql.RowId)\r
588          */\r
589         public void setRowId(int parameterIndex, RowId x) throws SQLException {\r
590                 st.setRowId(parameterIndex, x);\r
591         }\r
592 \r
593         /**\r
594          * @param parameterIndex\r
595          * @param xmlObject\r
596          * @throws SQLException\r
597          * @see java.sql.PreparedStatement#setSQLXML(int, java.sql.SQLXML)\r
598          */\r
599         public void setSQLXML(int parameterIndex, SQLXML xmlObject)\r
600                         throws SQLException {\r
601                 st.setSQLXML(parameterIndex, xmlObject);\r
602         }\r
603 \r
604         /**\r
605          * @param iface\r
606          * @return\r
607          * @throws SQLException\r
608          * @see java.sql.Wrapper#isWrapperFor(java.lang.Class)\r
609          */\r
610         @Override\r
611         public boolean isWrapperFor(Class<?> iface) throws SQLException {\r
612                 return st.isWrapperFor(iface);\r
613         }\r
614 \r
615         /**\r
616          * @param <T>\r
617          * @param iface\r
618          * @return\r
619          * @throws SQLException\r
620          * @see java.sql.Wrapper#unwrap(java.lang.Class)\r
621          */\r
622         @Override\r
623         @SuppressWarnings("unchecked")\r
624         public <T> T unwrap(Class<T> iface) throws SQLException {\r
625                 return (T)this;\r
626         }\r
627 \r
628 \r
629 \r
630 }\r