J'utilise une application Spring MVC, soutenue par une base de données MySQL à laquelle j'accède en utilisant JDBC. J'utilise le même code depuis un moment, et je n'ai jamais vraiment cherché à savoir si je l'utilisais correctement ou non (en utilisant les pools de connexion correctement, etc).Utilisation incorrecte du pool de connexions JDBC
Je suis conscient qu'il ya le JdbcTemplate là-bas, et je l'ai envisagé d'utiliser, mais si le seul avantage est que j'aurais juste de ne pas écrire le code passe-partout pour, alors je ne suis pas tout à fait convaincu que je devrait l'utiliser. En fait, je préfère la lisibilité de mon code sur le code JDBCTemplate. Ci-dessous le code dans mon DAO, pour une raison quelconque, j'ai l'impression de ne pas utiliser ConnectionPooling correctement.
public Agent get(Integer id){
ConnectionPool pool = new ConnectionPool();
Connection connection = pool.getConnection();
PreparedStatement ps = null;
try{
String query = "SELECT * FROM agent where id= ?";
ps = connection.prepareStatement(query);
ps.setInt(1,id);
ResultSet rs = ps.executeQuery();
Agent agent = null;
if(rs.next()){
agent = new Agent();
agent.setFirstName(rs.getString(1));
agent.setLastName(rs.getString(2));
agent.setStreet(rs.getString(3));
agent.setCity(rs.getString(4));
agent.setZip(rs.getString(5));
agent.setState(rs.getString(6));
agent.setUsername(rs.getString(7));
agent.setPassword(rs.getString(8));
agent.setId(rs.getInt(9));
agent.setEmail(rs.getString(10));
}
return agent;
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
finally{
ConnectionUtility utility = new ConnectionUtility();
utility.closePreparedStatement(ps);
pool.freeConnection(connection);
}
}
Le code ci-dessus est ce que je suis inquiet pour le plus d'être incorrect, mais j'ai quelques classes utilitaires qui peuvent également contribuer à une mauvaise pratique/code incorrect. Ci-dessous est ConnectionUtility classe.
public class ConnectionUtility{
public static void closeStatement(Statement s){
try{
if(s != null){
s.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
public void closePreparedStatement(Statement ps){
try{
if(ps != null){
ps.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
public static void closeResultSet(ResultSet rs){
try{
if(rs != null){
rs.close();
}
}
catch(SQLException e){
}
}
}
Voici mon ConnectionPool classe,
public class ConnectionPool {
private static ConnectionPool pool = null;
public ConnectionPool(){
}
public static ConnectionPool getInstance(){
if(pool == null){
pool = new ConnectionPool();
}
return pool;
}
@SuppressWarnings("static-access")
public Connection getConnection(){
try{
return ConnectionFactory.getInstance().getConnection();
}
catch(SQLException e){
e.printStackTrace();
return null;
}
}
public void freeConnection(Connection c){
try{
c.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
Encore une fois, je me sens comme si je me sers vraiment toutes ces classes mal, même si tout fonctionne bien, mais rien n'a été mis à le test en production. Je préfère rester avec JDBC, donc s'il vous plaît pas de conseils sur le passage à l'autre.
Jeez, installez-vous. La question était sur la façon d'améliorer son code. Votre commentaire n'est pas utile. –
J'améliore son code. Utiliser Spring sera une énorme amélioration par rapport à cela. C'est plus utile que vous le savez. – duffymo
Suggérer le printemps est utile. Lui dire que son code est horrible, vous ne travaillerez jamais avec lui, et qu'il n'aurait pas dû recevoir son diplôme n'est pas. –