hej, musze w projekcie wykorzystac zwykle JDBC (ze wzgledu na prostote bazy nie ma sensu uzywac frameworkow, zreszta nie jest to watkiem tego postu). No wiec przygotowuje sobie pare klas opakowujacych i napotkalam sie na pewna zagwostke. Podam przyklad-bedzie prosciej. Przygotowuje sobie klase do selectow. niech sie nazywa SelectTest:
class SelectTest{
public SelectTest(){
}
public ResultSet selectDataTest(String tableName) throws SQLException{
ResultSet result = null;
PreparedStatement prepStatement = null;
try {
prepStatement = connection.prepareStatement(
"SELECT * FROM " + tableName);
result = prepStatement.executeQuery();
} finally {
prepStatement.close();
}
return result;
}
}
dobra. mamy prosta metoda ktora bedize wyciagac komorki z zadanej tabeli. powiedzmy ze pozniej, w jakims projekcie chce tego uzywac. Tworze sobie obiekt typu SelectTest, wywoluje metode selectDataTest(nazwa), ta metoda zwraca mi ResultSet, wiec iteruje po next() i odczytuje co mi tam zwrocil. i tu niespodzianka-dostaje ze ResultSet zostal zamkniety. zastanawialam sie chwile o co chodzi-i winna jest linijka 'prepStatement.close()'. hmmm.. przeciez posprzatac trzeba (finally). poza tym zamykam PreparedStatement, a nie ResultSet. czy zamkniecie PreparedStatement (mimo ze wczesniej pobiore i zapisze wyniki do ResultSet) powoduje ze zamkne od razu ResultSet?
gdzie zatem sprzatac? pozniej w kodzie-w ktorym korzystam z tej klasy? po przeczytaniu resultSet, wywolywac na nim close?
bede wdzieczna za wyjasnienie mi tego
pzdr,
misty