简体   繁体   English

JDBC中SQL语句的Select子句中的游标

[英]Cursor in Select Clause of an sql Statement in JDBC

I have a query in which I am using Cursors in Select clause along with some other columns Values.I wanted to iterate through its result via ResultSet in Java.But couldn't find a way to get the Cusror from the result set.Is it possible to do so?Can anyone help me? 我有一个查询,其中在Select子句中使用Cursors以及其他一些列Values。我想通过Java中的ResultSet遍历其结果,但是找不到从结果集中获取Cusror的方法。可能这样做吗?有人可以帮助我吗?

For eg 例如

select name, roll_no,
    cursor (select subj1 
        from Subject
        where id = 'abc' 
        ) as cusr1
from student

Here would be a generic way to read columns from a ResultSet. 这是从ResultSet读取列的通用方法。

    while (resultSet.next()) { //Read every row
        int columnCount = resultSet.getMetaData().getColumnCount();
        for (int column = 1; column <= columnCount; column++) { //Read every column
            String columnName = resultSet.getMetaData().getColumnName(column);
            Object value = resultSet.getObject(columnName);
            if (value != null) {
                doSomething(columnName, value);
            }

        }         
    }

I assume you are using an Oracle DB. 我假设您正在使用Oracle数据库。 I also assume Java 7 or higher (try with resources). 我还假定Java 7或更高版本(尝试使用资源)。

You are using a Cursor Expression in your SQL. 您在SQL中使用游标表达式。

The Oracle JDBC Driver returns a java.sql.Resultset object when you call Resultset.getObject(column number|column label) for a Cursor Expression column. 当您为游标表达式列调用Resultset.getObject(column number|column label)时,Oracle JDBC驱动程序将返回java.sql.Resultset对象。

So it is safe to cast: 因此,投放是安全的:

try (Resultset innerResultset =  (Resultset) outerResultset.getObject(column number/label)) {
    while(innerResultset.next()) {
    ...
}

One comment: In many cases, for example when creating "master-detail" queries, you use a correlated Cursor Expression, meaning there is a join on a table that appears in the outer query. 一个评论:在许多情况下,例如,当创建“主从”查询时,您使用了相关的“光标表达式”,这意味着在外部查询中出现的表上存在联接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM