J'ai la source suivante.
Dans insertMessage(..), il appelle selectMessage pour vérifier si un enregistrement en double existe ou non.
Mais cette erreur se produit. Dans mon cerveau, ça fonctionne bien parce que la source de données me donne une nouvelle connexion...peut-être
java.sql.SQLException: ResultSet fermé
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 {
//Vérification de message en double
**if(selectMessage(code, language) != null) throw new SQLException("Un message en double existe pour le code : " + code + " et " + "le 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(); //Application en temps réel à MessageSource
}