2017-03-23 8 views
0

vertx3을 사용하여 ref_cursor를 반환하는 Oracle 저장 프로 시저를 읽으려고합니다. clob을 반환하고 JDBCType.CLOB을 사용하도록 편집하면 동일한 절차가 작동하지만 어떤 이유로 ref_cursor를 사용해야합니다. 누군가 나를 도울 수 있습니까?vertex를 사용하는 JDBC 오라클 저장 프로 시저 ref_cursor

JDBCClient client = JDBCClient.createShared(vertx, new JsonObject() 
       .put("url", "jdbc:oracle:thin:@localhost:8787:TEST") 
       .put("driver_class", "oracle.jdbc.OracleDriver") 
       .put("user", "user") 
       .put("password", "****")); 

client.getConnection(connection -> { 
     if (connection.succeeded()) { 
      SQLConnection con = connection.result(); 

     JsonObject params = new JsonObject() 
        .put("query", "{ call ? := package.procedure(?) }") 
        .put("paramsIn", new JsonArray().addNull().add(89)) 
        .put("paramsOut", new JsonArray().add(JDBCType.REF_CURSOR)); 

      con.callWithParams(params.getString("query"), params.getJsonArray("paramsIn"), params.getJsonArray("paramsOut"), query -> { 
       if(query.succeeded()){ 
        ResultSet rs = query.result(); 
        System.out.println(rs.toJson().toString()) 
       }else{ 
        System.out.println(req.body() + query.cause().toString()); 
       } 
       }); 
      } else { 
System.out.println(connection.cause().toString())     
      } 
      }); 

나는 오류 얻을 :

{전화를? = package.procedure} java.sql.SQLException의 (?) : 유형 드 콜론 비 valide : Vert.x 3.4.1의 2012

답변

0

, 커서는 지원되지 않습니다. 이 문제를 해결하기 위해 자신의 javax.sql.DataSource을 만들고 Vertx.executeBlocking과 함께 사용하여 JDBC java.sql.CallableStatement을 호출 할 수 있습니다.

나머지 질문에 대해서는 creating a JDBCClient instance from your javax.sql.DataSource으로 Vert.x API를 사용할 수 있습니다. 이렇게하면 두 개의 다른 연결 풀을 유지하지 않아도됩니다.

+0

Vert.x의 버전 3.2.1에서 정확히 내가하는 일은 버전 3.4.1에서 다른 방법인지 묻습니다. –