问题在于您在中获取数据的方式
getStuff()。每次访问
getStuff()您都会获得新鲜的食物,
ResultSet但您不会关闭它。
这违反了
Statement该类的期望(请参见此处-http
:
//docs.oracle.com/javase/7/docs/api/java/sql/Statement.html):
默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果一个ResultSet对象的读取与另一个对象的读取是交错的,则每个都必须由不同的Statement对象生成。如果存在打开的语句,Statement接口中的所有执行方法都会隐式关闭该语句的当前ResultSet对象。
更糟糕的是
rs调用代码中的。它也从
statement字段外派生,但未关闭。
底线:您有多个
ResultSet与同一个
Statement对象同时打开。



