Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gọi thủ tục được lưu trữ Oracle từ Ứng dụng Java bằng cách sử dụng nhóm kết nối ngủ đông và c3p0

Trong trường hợp ai đó gặp sự cố tương tự, nó có thể được giải quyết như:

public class CallSPTest
{
   public static STRUCT createSTRUCT(oracle.sql.StructDescriptor structDescriptor, 
    java.sql.Connection connection, java.lang.Object[] objects) 
    throws java.sql.SQLException
    {
       return new STRUCT(structDescriptor,connection,objects);
    }
    public void testSP(Session s)
    {
       t = s.beginTransaction();
       s.doWork(new Work()
        {

            @Override
            public void execute(Connection connection) throws SQLException
            {
                try
                {
                    CallableStatement cs = connection.prepareCall("call SP_TEST(?)");                       
                    final Object[] values = new Object[]{1,2};

                    java.sql.Connection connect = 
  org.hibernate.jdbc.BorrowedConnectionProxy.getWrappedConnection(connection);
                    C3P0ProxyConnection castCon = (C3P0ProxyConnection) connect;
                    Method m = StructDescriptor.class.getMethod("createDescriptor", new Class[]{ String.class,Connection.class});
                    Object[] args = new Object[]{"MyType",C3P0ProxyConnection.RAW_CONNECTION};
                    StructDescriptor desc1 =(StructDescriptor) castCon.rawConnectionOperation(m, null, args);

                    Method m2 = CallSPTest.class.getMethod("createSTRUCT",
                            new Class[]{StructDescriptor.class, Connection.class,Object[].class});

                    args = new Object[] {desc1,C3P0ProxyConnection.RAW_CONNECTION,values};
                    final STRUCT struct1 = (STRUCT)castCon.rawConnectionOperation(m2,null,args);
                    cs.setObject(1, struct1, Types.STRUCT);
                    int aff_rows = cs.executeUpdate();
                }
                catch (Exception e)
                {
                    System.out.print(e.getMessage());
                }
            }
        });
    } 
    catch (Exception e)
    {
        System.out.print(e.getMessage());
    }
    finally
    {
        if (null != t)
        {
            t.rollback();                
        }
    }

}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nâng cấp kiểm soát lưới sau khi nâng cấp DB thủ công

  2. ORACLE với 2 phép nối bên trái bị treo bằng cách sử dụng LITERAL cho vị từ ở bên ngoài JOIN loại trừ hàng khỏi bảng hầu hết LEFT

  3. Đặt hàng truy vấn Oracle theo SUM mà không chọn SUM

  4. Chèn đệ quy bằng mệnh đề kết nối

  5. Tại sao kiểu dữ liệu Long đã được thay thế bằng LOB trong Oracle?