Я полагаю, что если вы закроете соединение, PreparedStatement будет «потеряно», но до тех пор, пока одно и то же соединение остается открытым, одно и то же PreparedStatement должно использоваться. Вы должны взглянуть на Spring, чтобы сделать это для вас, используя JdbcTemplate. Это отвлечет все это, так что вам не придется об этом беспокоиться. Просто передайте ему источник данных, и все готово.
Вот как вы можете использовать c3p0 в качестве объекта DataSource: http://forum.springframework.org/showthread.php?t=13078
Затем вы можете создать компонент JdbcTemplate и передать источник данных в качестве аргумента конструктора, а затем внедрить JdbcTemplate в любые используемые вами объекты DAO.