使用Vertx和jdbc获取Oracle存储过程ref_cursor的结果

时间:2016-09-08 15:49:05

标签: java jdbc vert.x

我正在尝试使用vertx3读取返回ref_cursor的Oracle存储过程。如果我编辑它以返回clob并使用JDBCType.CLOB,则相同的过程正在运行但由于某种原因我必须使用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())                 
             }
            });

我收到错误:

 java.sql.SQLException: Type de colonne non valide: 2012

1 个答案:

答案 0 :(得分:1)

无法将游标转换为JSON,因此Vert.x JDBC客户端不支持它们。但是,您的驱动程序似乎也无法识别REF_CURSOR类型。我认为它是在JDK8中添加的,可能你的驱动程序是为以前的版本编译的?

相关问题