01: /*******************************************************************************
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing,
13: * software distributed under the License is distributed on an
14: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15: * KIND, either express or implied. See the License for the
16: * specific language governing permissions and limitations
17: * under the License.
18: *******************************************************************************/package org.ofbiz.entity.jdbc;
19:
20: import java.lang.reflect.Method;
21: import java.sql.Connection;
22: import java.sql.PreparedStatement;
23: import java.sql.Statement;
24:
25: public class CursorConnection extends AbstractCursorHandler {
26:
27: public static Connection newCursorConnection(Connection con,
28: String cursorName, int pageSize) throws Exception {
29: return (Connection) newHandler(new CursorConnection(con,
30: cursorName, pageSize), Connection.class);
31: }
32:
33: protected Connection con;
34:
35: protected CursorConnection(Connection con, String cursorName,
36: int fetchSize) {
37: super (cursorName, fetchSize);
38: this .con = con;
39: }
40:
41: public Object invoke(Object proxy, Method method, Object[] args)
42: throws Throwable {
43: if (method.getName().equals("prepareStatement")) {
44: System.err.println("prepareStatement");
45: args[0] = "DECLARE " + cursorName + " CURSOR FOR "
46: + args[0];
47: PreparedStatement pstmt = (PreparedStatement) method
48: .invoke(con, args);
49: return CursorStatement.newCursorPreparedStatement(pstmt,
50: cursorName, fetchSize);
51: } else if (method.getName().equals("createStatement")) {
52: System.err.println("createStatement");
53: Statement stmt = (Statement) method.invoke(con, args);
54: return CursorStatement.newCursorStatement(stmt, cursorName,
55: fetchSize);
56: }
57: return super.invoke(con, proxy, method, args);
58: }
59: }
|