【问题标题】:JDBC Oracle stored procedure ref_cursor using vertx使用 vertx 的 JDBC Oracle 存储过程 ref_cursor
【发布时间】:2017-03-23 19:16:35
【问题描述】:

我正在尝试使用 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())                 
             }
            });

我得到了错误:

{ 调用 ? := package.procedure(?) } java.sql.SQLException: 类型 de 冒号无效:2012

【问题讨论】:

    标签: java oracle vert.x ojdbc


    【解决方案1】:

    从 Vert.x 3.4.1 开始,不支持游标。作为一种解决方法,您可以创建自己的 javax.sql.DataSource 并将其与 Vertx.executeBlocking 一起使用以调用 JDBC java.sql.CallableStatement

    对于其余的查询,您仍然可以使用 creating a JDBCClient instance from your javax.sql.DataSource 提供的 Vert.x API。这样可以避免维护两个不同的连接池。

    【讨论】:

    • 这正是我在 Vert.x 的 3.2.1 版本中所做的,我问在 3.4.1 版本中是否是另一种方式
    【解决方案2】:

    您是否尝试过使用com.oracle:ojdbc8:12.2.0.1 中的oracle.jdbc.OracleTypes.CURSOR 而不是JDBCType.REF_CURSOR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 2021-07-14
      • 2018-07-28
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      相关资源
      最近更新 更多