Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(JDBC):查询结果迭代的替代方法[while(resultSet.next())]_Java_Sql_Jdbc - Fatal编程技术网

Java(JDBC):查询结果迭代的替代方法[while(resultSet.next())]

Java(JDBC):查询结果迭代的替代方法[while(resultSet.next())],java,sql,jdbc,Java,Sql,Jdbc,我正在为此寻找任何替代方案: while(resultSet.next()){ } 我试图避免在不需要它们的地方循环 我正在寻找返回单个结果的最简单方法 欢迎任何简短的注释和回答 了解ORM-对象/关系映射: 我推荐Spring JPA或Hibernate。您可以使用或方法检索结果,而无需循环,例如: resultSet.next(); String name = resultSet.getString("name"); 或使用索引: resultSet.next(); Str

我正在为此寻找任何替代方案:

while(resultSet.next()){

}

  • 我试图避免在不需要它们的地方循环

  • 我正在寻找返回单个结果的最简单方法



欢迎任何简短的注释和回答

了解ORM-对象/关系映射:


我推荐Spring JPA或Hibernate。

您可以使用或方法检索结果,而无需循环,例如:

resultSet.next();
String name = resultSet.getString("name");
或使用索引:

 resultSet.next();
String name = resultSet.getString(1);

您可以制作一个
结果过滤器

class ResultSetIterator implements Iterator<ResultSet> {

    private final ResultSet r;
    private ResultSet next = null;

    public ResultSetIterator(ResultSet r) {
        this.r = r;
    }

    @Override
    public boolean hasNext() {
        if (next == null) {
            try {
                if (r.next()) {
                    next = r;
                }
            } catch (SQLException ex) {
                // NB: Log this error.
            }
        }
        return next != null;
    }

    @Override
    public ResultSet next() {
        ResultSet n = next;
        next = null;
        return n;
    }

}
您现在可以执行以下操作:

public void test() {
    ResultSet resultSet = null;
    // ...
    try {
        for (ResultSet r : in(new ResultSetIterator(resultSet))) {
            // We're there.
        }

    } finally {
        if (resultSet != null) {
            resultSet.close();
        }

    }
}

这更优雅。记得关闭你的
结果集

做什么?有双向游标、JPA实体、分页。您想对结果的项做什么?澄清您的问题,您希望实现什么。简要说明您的功能模块及其要求,即它将在哪里使用,以及它实现了什么,然后只能建议最佳优化的解决方案,因为您编写的代码片段属于DS层。这方面没有结构良好的目标。使用替代方法的上下文只是自己的方法和偏好。我在尝试创建一个动态方法来执行和返回查询时遇到了这个问题。并且已经用我的主要动机编辑了这个问题。
resultSet.next();字符串结果=resultSet.getString(“columnName”)
是使用resultset API可以使用的最简单的方法。但是,我会使用SpringJDBC或类似的工具。
public void test() {
    ResultSet resultSet = null;
    // ...
    try {
        for (ResultSet r : in(new ResultSetIterator(resultSet))) {
            // We're there.
        }

    } finally {
        if (resultSet != null) {
            resultSet.close();
        }

    }
}