从ResultSet获取所有结果

时间:2018-02-02 15:35:13

标签: java mysql resultset

我收到类型为ResultSet的{​​{1}}并且一切正常,但它没有从列表中获取第一项。

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

ArrayList<MyClass>

然后我运行if (!result.next()) { //throw Excepion } 并填充while (result.next()) {

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

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

请注意,此代码使用if

所以我的问题/疑问是:

1)我是否最好删除try...finally,并为相同的例外添加if (!result.next())

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

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

3 个答案:

答案 0 :(得分:4)

protected void attachBaseContext(Context base) { super.attachBaseContext(base); // this one is needed to enable multidex in your application MultiDex.install(this); } public void onCreate() { super.onCreate(); // this one is needed to init the Fabric SDK FabricInitializer.initializeFabric(this, FabricInitializer.Caller.Unity); } 获取所有项目并将它们放在列表中是这样的:

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循环的标头就足够了。

Oracle's reference

答案 1 :(得分:2)

你可以这样检查:

if(!rs.isBeforeFirst())
如果结果集不包含任何行,则

rs.isBeforeFirst()返回false。

答案 2 :(得分:-1)

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