Raga ho provato a modificare in questo modo:
codice:
package beans;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class GuestDataBean
{
private Connection connection;
private Statement statement;
private ResultSet resultSet;
public GuestDataBean() throws Exception
{
Class.forName ("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection ("jdbc:mysql://localhost/guestbook", "root", "");
statement = connection.createStatement();
}
public ArrayList < GuestBean > getGuestList() throws SQLException
{
resultSet = statement.executeQuery ("SELECT firstName, lastName, email FROM guests");
ArrayList < GuestBean > guestList = new ArrayList < GuestBean >();
resultSet.beforeFirst();
while (resultSet.next())
{
GuestBean guest = new GuestBean();
guest.setFirstName (resultSet.getString (1));
guest.setLastName (resultSet.getString (2));
guest.setEmail (resultSet.getString (3));
guestList.add (guest);
}
try
{
statement.close();
connection.close();
}
catch (Exception exception) {}
return guestList;
}
public void addGuest (GuestBean guest) throws SQLException
{
String firstName = guest.getFirstName();
String lastName = guest.getLastName();
String email = guest.getEmail();
statement.executeUpdate ("INSERT INTO guests (firstName, lastName, email) VALUES ('" + firstName + "', '" + lastName + "', '" + email + "')");
try
{
statement.close();
connection.close();
}
catch (Exception exception) {}
}
}
Ho spostato la SELECT dal costruttore al metodo getGuestList, così viene richiamata solo se necessaria. E stavolta, dopo aver inserito un messaggio (che comunque riesce ad inserirsi nel database), viene lanciata una nuova SQLException: "No operations allowed after statement closed." Come se il resultSet di prima e lo statement, avessero solo visibilità costruttore, ma io le ho dichiarate fuori dal costruttore... come è possibile? o_O