2017-03-23 9 views
0

vertex3を使用してref_cursorを返すOracleストアドプロシージャを読み込もうとしています。私がそれを編集してclobを返し、JDBCType.CLOBを使用するのであれば、同じ手順が有効ですが、何らかの理由でref_cursorを使用する必要があります。誰か助けてくれますか?JDBCストアドプロシージャref_cursor(vertxを使用)

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という(?):タイプデ コロン非ヴァリデ: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を使用できます。これにより、2つの異なる接続プールを維持することが回避されます。

+0

Vert.xのバージョン3.2.1で行っていることとまったく同じですが、バージョン3.4.1では他の方法であるかどうか尋ねます –

関連する問題