Java 池连接JDBC最佳实践
我总是为我的连接实现一个Pool类和一个try{}catch{}finally语句 这是游泳池:Java 池连接JDBC最佳实践,java,mysql,jdbc,pool,Java,Mysql,Jdbc,Pool,我总是为我的连接实现一个Pool类和一个try{}catch{}finally语句 这是游泳池: package Util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Vector; public class PoolvTiger { private Vector <Connection> connec
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Vector;
public class PoolvTiger
{
private Vector <Connection> connections = new Vector<Connection>();
protected String jdbc;
protected String servidor;
protected String usuario;
protected String password;
protected int cantCon;
private static PoolvTiger pool;
private PoolvTiger()
{
getConfiguration();
for (int i= 0; i< cantCon;i++)
connections.add(connect());
}
public static PoolvTiger getPoolConnection()
{
if (pool== null)
pool =new PoolvTiger();
return pool;
}
private Connection connect()
{
try
{
//Setear driver
Class.forName("com.mysql.jdbc.Driver");
String dbConnectString = jdbc + servidor;
Connection con = DriverManager.getConnection (dbConnectString, usuario, password);
return con;
}
catch (SQLException e)
{
System.out.println("Mensaje Error: " + e.getMessage());
System.out.println("Stack Trace: " + e.getStackTrace());
return null;
}
catch (Exception ex)
{
System.out.println("Mensaje Error: " + ex.getMessage());
System.out.println("Stack Trace: " + ex.getStackTrace());
return null;
}
}
public void getConfiguration()
{
// Carga del fichero de propiedades
try
{
//Leo los valores de configuracion
jdbc = "jdbc:mysql://";
cantCon = 20;
servidor = Props.vtiger_host+":3306/"+Props.vtiger_db;
usuario =Props.vtiger_user;
password = Props.vtiger_pass;
}
catch (Exception e)
{
System.out.println("Mensaje Error: " + e.getMessage());
System.out.println("Stack Trace: " + e.getStackTrace());
}
}
public void closeConnections()
{
for (int i=0; i<connections.size();i++)
{
try
{
connections.elementAt(i).close();
}
catch(Exception e)
{
System.out.println("Mensaje Error: " + e.getMessage());
System.out.println("Stack Trace: " + e.getStackTrace());
}
}
}
public Connection getConnection()
{
Connection c = null;
if (connections.size()>0)
c = connections.remove(0);
else
{
c = connect();
//System.out.println("EXITO");
}
return c;
}
public void realeaseConnection(Connection c)
{
connections.add(c);
}
}
我在做,莱特
我注意到我没有使用池的closeConnections方法,我也没有关闭任何东西,但是我的应用程序运行得很好
结果集和语句也必须关闭吗
另外,我使用了很多这种格式的方法。这不仅仅是一个,还有很多,所以我在寻找完美的实现
谢谢 如果您正在寻找完美的实现,为什么您要创建自己的连接池而不是一个经过测试的连接池?我没有创建自己的连接池,他们在大学里为我提供了这个连接池。我一整年都在课堂上使用它。你有完美实现的链接给我看吗?你怎么能确定有一个完美的实现?
Connection conn=null;
try{
conn=PoolvTiger.getPoolConnection().getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM something");
ResultSet rs=ps.executeQuery();
PoolvTiger.getPoolConnection().realeaseConnection(conn);
}catch(Exception e){
Log.log("ERROR al validar usuario");
}finally {
PoolvTiger.getPoolConnection().realeaseConnection(conn);
}