问题在于你在中获取数据的方式
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对象同时打开。



