Opa código com as correções:
public List<Evento> listar2() {
PreparedStatement stmt = null;
ResultSet rs = null;
List<Evento> eventos = new ArrayList<Evento>();
try {
Calendar dataHoje = Calendar.getInstance();
Calendar dataIni = Calendar.getInstance();
Calendar dataFim = Calendar.getInstance();
dataHoje.add(Calendar.DAY_OF_MONTH,-3);
dataIni.setTime(dataHoje.getTime());
dataFim.setTime(dataIni.getTime());
dataFim.add(Calendar.DAY_OF_MONTH,7);
stmt = this.connection.prepareStatement("SELECT * FROM eventos WHERE eventos.data BETWEEN ? and ? ORDER BY data, horario");
stmt.setDate(1, new java.sql.Date(dataIni.getTimeInMillis()));
stmt.setDate(2, new java.sql.Date(dataFim.getTimeInMillis()));
rs = stmt.executeQuery();
while (rs.next()) {
eventos.add(populaEvento(rs));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
finally{
if(rs !=null){
try{
rs.close();
}catch(SQLException exc1){
throw new RuntimeException(exc1);
}
}
if(stmt!=null){
try{
stmt.close();
}catch(SQLException exc2){
throw new RuntimeException(exc2);
}
}
}
return eventos;
}