java.sql.SQLException: 流已被關閉

數據庫字段以下:
ID       INTEGER                                
USERNAME VARCHAR2(50) Y                         
SENDER   VARCHAR2(50) Y                         
MESSAGE  LONG         Y                         
SENDTIME VARCHAR2(20) Y                         
ISREAD   VARCHAR2(1)  Y     

DAO 層的getAll方法
public List<SmsPo> getAll()
{
String listSql="select * from sms";
List<SmsPo> listSms=new ArrayList<SmsPo>();
PreparedStatement ps=DbBase.prepare(connection, listSql);
try {
ResultSet rs=ps.executeQuery();
while(rs.next())
{
SmsPo smsPo=new SmsPo();
smsPo.setId(rs.getInt(1));
smsPo.setUsername(rs.getString("username"));
smsPo.setSender(rs.getString("sender"));
smsPo.setSendtime(rs.getString("sendtime"));
smsPo.setMessage(rs.getString("message"));
smsPo.setIsRead(rs.getBoolean("isread"));
listSms.add(smsPo);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
DbBase.close(ps);
DbBase.close(connection);
}
return listSms;
}

main函數的測試:
public static void main(String[] args){
SmsService smsService=new SmsService();
List<SmsPo> list=smsService.getAll();
Iterator<SmsPo> iterator=list.iterator();
while(iterator.hasNext())
{
SmsPo smsPo=iterator.next();
System.out.println(smsPo.getUsername());
}
}
 此時運行,會出現錯誤:
java.sql.SQLException: 流已被關閉
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.LongAccessor.getBytes(LongAccessor.java:150)
at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:192)
at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:421)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:396)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1514)
at com.yy180.docman.dao.SmsDAO.getAll(SmsDAO.java:33)
at com.yy180.docman.service.SmsService.getAll(SmsService.java:19)
at com.yy180.all.TestAll.main(TestAll.java:12)


而當我將DAO層的相關代碼修改一下順序:
while(rs.next())
{
SmsPo smsPo=new SmsPo();
smsPo.setId(rs.getInt(1));
smsPo.setUsername(rs.getString("username"));
smsPo.setSender(rs.getString("sender"));
smsPo.setMessage(rs.getString("message"));
smsPo.setSendtime(rs.getString("sendtime"));
smsPo.setIsRead(rs.getBoolean("isread"));
listSms.add(smsPo);
}

運行一下就能夠了。。
緣由多是讀取數據庫的流是按順序的,當不按順序讀取時,就會出現錯誤,
java

相關文章
相關標籤/搜索