繁体   English   中英

从ResultSet获取所有结果

[英]Getting all results from ResultSet

我得到一个类型为ArrayList<MyClass>ResultSet ,并且一切运行良好,除了它没有从列表中获取第一个项目。

看来这部分实际上是第一个选择并使用它,尽管实际上没有做任何事情:

if (!result.next()) {
    //throw Excepion
}

然后我运行while (result.next()) {并填充ArrayList

数据库中的第一项只是一个空String (实际上是一个空格),还有n个其他条目。 我也想要那里的空白条目因为这填充了JComboBox并且需要第一个条目始终保留为空白选项。

但是,由于在while (result.next())之前检查if (!result.next()) while (result.next()) ,它只会从item2开始显示。 如果我删除if ,它将在下拉列表中留下空白选项。

需要注意的是,这段代码正在try...finally

所以我的问题/疑问是:

1)我最好删除if (!result.next())并为相同的异常添加一个catch吗?

2)是否可以使用我描述的初始方式,但保留结果中的第一个条目?

3)有没有更好的方法来获得第一个条目而不仅仅是在表格的第一个条目中有空格? (注意,如果它只是字面上的空白,并且我删除了if ,它将在下拉列表中显示一个小小的选项。

ResultSet所有项目并将它们放在列表中如下所示:

List<MyObj> data = new ArrayList<>();
try {
    stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT Id, Name, ...");
    while (rs.next()) {
        int id= rs.getInt("Id");
        String name = rs.getString("Name");
        data.add(new MyObject(id, name));
    }
} catch (SQLException e ) {
    JDBCTutorialUtilities.printSQLException(e);
} finally {
    if (stmt != null) { stmt.close(); }
}

您不需要检查rs的状态,因为检查while循环的标头就足够了。

Oracle的参考

你可以这样检查:

if(!rs.isBeforeFirst())

如果结果集不包含任何行, rs.isBeforeFirst()将返回false。

当你调用next()函数时,你总是跳转到下面的记录,你必须避免使用if(!result.next()),你可以使用if(result!= null)然后循环

暂无
暂无

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

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