我有一个相当简单的 portlet,它显示门户网站的访问者数量(在线、每日、每周、每月、每年)。
在 doView 方法的 portlet 类中,首先我调用一个方法,该方法对表进行插入(有关新访问者的信息)。在我一一调用 5 个方法后,它们在同一张表上进行计数选择。它们都非常相似,只是它们的查询不同。方法实现之一如下:
public static Integer getOnline() {
Integer res = null;
Statement stmt = null;
ResultSet rs = null;
try {
stmt = getConnection().createStatement();
rs = stmt.executeQuery(query);
if (rs.next()) {
res = new Integer(rs.getString("1"));
}
} catch (SQLException e) {
log.error("Excepton: " + e);
} finally {
if (rs != null) {
try { rs.close(); } catch (SQLException e) { log.warn("Error closing result set: ", e); }
rs = null;
}
if (stmt != null) {
try { stmt.close(); } catch (SQLException e) { log.warn("Error closing statement: ", e); }
stmt = null;
}
}
return res;
}
获得连接:
public static Connection getConnection() {
try {
if (connection == null) {
if (dataSource == null) {
dataSource = (DataSource) new InitialContext().lookup(dataSourceName);
}
connection = dataSource.getConnection();
}
} catch (Exception e) {
log.error("Error on opening a connection: ", e);
}
return connection;
}
连接在 doView 方法结束时关闭。有时我会遇到这个异常:
com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.14.88] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
从一种或几种确实选择的方法中。有时还会出现以下错误:
com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection is closed.
com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Statement is closed.
在互联网上搜索后,我仍然没有找到/意识到我的情况下出现错误的原因是什么以及如何解决它。任何帮助,将不胜感激。