【问题标题】:Oracle JDBC callable statement and getMetadata countOracle JDBC 可调用语句和 getMetadata 计数
【发布时间】:2021-06-27 10:13:27
【问题描述】:

假设我有一个如下所示的 pl/sql:

  final Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "manager");
    String plsql = "" +
    " declare " +  
    "    p_id varchar2(20) := null; " +
    "    l_rc sys_refcursor;" +
    " begin " +
    "    p_id := ?; " +
    "    ? := 'input parameter was = ' || p_id;" +
    "    open l_rc for " +
    "        select 1a id, 'hello' name from dual " +
    "        union " +
    "        select 2a, 'peter' from dual; " +
    "    ? := l_rc;" +
    " end;";

    CallableStatement cs = c.prepareCall(plsql);
    cs.setString(1, "12345");
    cs.registerOutParameter(2, Types.VARCHAR);
    cs.registerOutParameter(3, OracleTypes.CURSOR);

    cs.execute();

这里一切都很好,但我怎样才能从中获取 metadat.getColumnCount() 呢?

我想达到什么目标? 而不是:

 ResultSet cursorResultSet = (ResultSet) cs.getObject(3);
        while (cursorResultSet.next ())
        {
            System.out.println (cursorResultSet.getString(1) + " " + cursorResultSet.getString(2));
        } 

我想查找元数据计数并在循环中打印一条记录的所有值,例如:

//伪代码

int x = callablestatement.metadata.count();
String myRecord='';
while (cursorResultSet.next ()){
        for(int i=1; i<=x; i++){
          myRecord= myRecord+ " " + cursorResultSet.getString(i);
                               }
                               }

【问题讨论】:

  • “metadata.count()”是什么意思?结果集中的列数?
  • 对不起,我在考虑 metadata.getColumnCount()
  • 那么,你的意思是cursorResultSet.getMetaData().getColumnCount()

标签: oracle jdbc metadata callable-statement


【解决方案1】:

要获取结果集中的列数,需要使用

cursorResultSet.getMetaData().getColumnCount()

【讨论】:

  • 该死的就这么简单,看起来我很愚蠢......谢谢@Mark
  • @EdXX 提示:Java API documentation 范围很广,当您认为某些东西存在但不确定它的名称时,搜索它会很有帮助。
  • 如果你能再回答一个问题... 在这个例子中(票证中的第一个描述)我们打开了一个游标,但我们从不关闭它。我们不应该稍后以某种方式关闭它吗?或者用数据库连接关闭就足够了?
  • @EdXX 最好在完成后立即关闭结果集。使用 try-with-resources 可以简化这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多