从 ResultSet 获取所有结果

ach*_*áin 5 java mysql resultset

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

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

if (!result.next()) {
    //throw Excepion
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

请注意,此代码使用的是try...finally.

所以我的问题/疑问是:

1)我最好删除并仅针对相同的异常if (!result.next())添加 a吗?catch

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

3)是否有比仅在表中的第一个条目中包含空格更好的方法来获取第一个条目?(请注意,如果它实际上是空白的,并且我删除了if,它将在下拉表中显示一个很小的选项。

das*_*ght 5

从列表中取出所有项目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(); }
}
Run Code Online (Sandbox Code Playgroud)

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

甲骨文的参考资料


isa*_*ace 2

您可以这样检查:

if(!rs.isBeforeFirst())
Run Code Online (Sandbox Code Playgroud)

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