Re: Database helper class with PreparedStatements
teser3@hotmail.com wrote:
I have a JDBC working with Oracle 9i where database is inserted/
updated maybe 10 times at most during a week with very little usage in
my Tomcat 4.1.3 Container.
The Database classes I have used for the past year are working great
but I wonder if I should be closing my connection in my database
helper class with Prepared statements:
public class DbInsert
{
private PreparedStatement stat;
private Connection connection;
public DbInsert(Connection connection)
{
this.connection = connection;
}
public void cityInserter(FormBean city) throws SQLException
{
stat = connection.prepareStatement("Insert into City (street,
school) values (?,?)");
stat.setString(1, city.getStreet());
stat.setString(2, city.getSchool());
stat.executeUpdate();
}
//more Methods with preparedstatements here....
}
....
public class DbWork
{
private Connection connection = new
ConnectionMgr().getConnection();
public dbMethod(FormBean city)
{
try
{
new DbInsert(connection).cityInserter(city);
}
catch(SQLException ex)
{
System.out.println(ex);
}
finally
{
connection.close();
}
}
//more db methods using prepared statements here
.....
}
When I experiment and put a close statement in the [b]DbInsert[/b]
class method then my database insert wont work because it would be
closed when it is called in the [b]DbWork[/b] class?
I am surprised that it even work with a connection.close in dbMethod.
For very small single desktop apps you can consider a single
permanent open database connection.
For a complex app or any web app, then you should use a connection
pool and only keep the connection open when you need it.
Something like:
public void cityInserter(FormBean city) throws SQLException
{
Connection connection = new ConnectionMgr().getConnection();
PreparedStatement stat = connection.prepareStatement("Insert
into City (street, school) values (?,?)");
stat.setString(1, city.getStreet());
stat.setString(2, city.getSchool());
stat.executeUpdate();
connection.close();
}