I have following source.
In insertMessage(..), it calls selectMessage to check whether duplicate record exists or not.
But this error occurs. In my brain, it works fine because datasource gives me new Connection...maybe
java.sql.SQLException: ResultSet closed
at org.sqlite.RS.checkOpen(RS.java:63)
at org.sqlite.RS.findColumn(RS.java:108)
at org.sqlite.RS.getString(RS.java:317)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.springframework.context.support.CachedMessageSourceDao.selectMessage(CachedMessageSourceDao.java:68)
at org.springframework.context.support.CachedMessageSourceDao.insertMessage(CachedMessageSourceDao.java:94)
at MessageSourceDemo.main(MessageSourceDemo.java:11)
public String selectMessage(String code, String language) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String value = null;
String sql = "SELECT code, value, language FROM " + TABLE + " where code=? and language=? and flag = '" + FLAG_OK + "'";
try {
conn = dataSource.getConnection();
conn.setAutoCommit(true);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, code);
pstmt.setString(2, language);
rs = pstmt.executeQuery();
rs.next();
String _code = rs.getString("code");
String _value = rs.getString("value");
String _language = rs.getString("language");
Locale _locale = new Locale(_language);
value = _value;
} catch(SQLException ex) {
ex.printStackTrace();
} finally {
try {
if(rs != null);
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return value;
}
public synchronized void insertMessage(String code, String value, String language) throws SQLException {
//Duplicate Message Check
**if(selectMessage(code, language) != null) throw new SQLException("Duplicate message exists for code: " + code + " and" + "language: " + language);**
String sql = "INSERT INTO " + TABLE + " (code, value, language, flag) values (?, ?, ?, '" + FLAG_OK + "')";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(true);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, code);
pstmt.setString(2, value);
pstmt.setString(3, language);
pstmt.execute();
} catch(SQLException ex) {
ex.printStackTrace();
} finally {
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
notifyMessageChange(); //Realtime apply to MessageSource
}
Your resultset
probably didn't have any record, which is the reason why next()
closed it.
next() returns a boolean, check it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With