Cual es la mejor conexion para BD SQL Server en Swing 1.Pool de conexion 2. JTDS 3. JAR de Microsoft sqljdbc4 ?

Buenas tardes compañeros, les hablo desde Colombia. Estoy desarrollando una aplicacion en Swing cliente / servidor y leyendo cuanto tutorial he encontrado sobre las mejoras en las conexiones a BD SQL server les expreso la siguiente duda que he tenido.
Cuales de las 3 formas es la mejor en conexion para BD SQL Server. (Hablando que es para aplicaciones Swing). Todas funcionan..
Agradesco antemano su gentil colaboracion, las mejoras que les puedan realizar al codigo, criticas, comentarios, etc. esto me ayuda a mejorar como programador.

1. Pool de Conexiones.
public class Pool_Conexion {
public static Connection con = null;
SQLServerConnectionPoolDataSource pool=null;
public java.sql.Connection getConnection() {
try {
pool= new SQLServerConnectionPoolDataSource();
pool.setUser("USUARIO");
pool.setPassword("PASSWORD");
pool.setServerName("IP_SERVIDOR");
pool.setPortNumber(1433);
pool.setDatabaseName("NOMBRE_BD");
con = pool.getConnection();
if (con != null) {
System.out.println("Pool_Conexion correcta.");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error de seguimiento en getConnection() : " + e.getMessage());
closeConnection();
}
return con;
}

public void closeConnection() {
try {
if (con != null) {
con.close();
System.out.println("Conexión Cerrada Correctamente");
}
con = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}

2. Conexion con JTDS
public class Conexion_JTDS {
private Connection con = null;
private final String url = "jdbc:jtds:sqlserver://";
private final String serverName = "IP_SERVIDOR";
private final String portNumber = "1433";
private final String databaseName = "NOMBRE_BD";
private final String userName = "USUARIO";
private final String password = "PASSWORD";

PreparedStatement ing=null; // ing = Ingreso
ResultSet rs = null;

private String getConnectionUrl() {
return url + serverName + ":"+portNumber+"/"+ databaseName +";";
}

public java.sql.Connection getConnection() {
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
if (con != null) {
System.out.println("Conexión correcta.");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error de seguimiento en getConnection() : " + e.getMessage());
closeConnection();
}
return con;
}

public void closeConnection() {
try {
if (con != null) {
con.close();
System.out.println("Conexión Cerrada Correctamente");
}
con = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}

3. Conexion con sqljdbc4 // Drivers de Microsoft.
public class Conexion_sqljdbc {

private Connection con = null;
private final String url = "jdbc:sqlserver://";
private final String serverName = "IP_SERVIDOR";
private final String portNumber = "1433";
private final String databaseName = "NOMBRE_BD";
private final String userName = "USUARIO";
private final String password = "PASSWORD";

PreparedStatement ing=null;
ResultSet rs = null;

private String getConnectionUrl() {
return url + serverName + ":" + portNumber + ";databaseName=" + databaseName + ";";
}

public java.sql.Connection getConnection() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
if (con != null) {
System.out.println("Conexión correcta.");
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "No existe coneccion con la base de datos ");
System.out.println("Error de seguimiento en getConnection() : " + e.getMessage());
closeConnection();
}
return con;
}

public void closeConnection() {
try {
if (con != null) {
con.close();
}
con = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

La mejor forma de conectarse en SQLServer

A reserva de que otros compañeros del sitio opinen de acuerdo a su experiencia y expongan sus motivos.

Yo te diría que implementaras las 3, pero de forma parametrizada.

Cuando haces una aplicación normalmente te ajustas a las condiciones o posibilidades que tiene el cliente para el cual estás trabajando, a su presupuesto, a los servidores con los que cuentan. No se piensa mucho lo que pasará a futuro con la aplicación.

En una ocasión hubo un sistema en el cual estábamos trabajando (incluía módulos de swing, jsp´s, servlets,ejb´s, servicios web, etc.) y se terminó implantando en las instalaciones de más de 5 clientes en diferentes países y organizaciones.

Algunos clientes usaban sqlserver, otros oracle, otros aunque no lo creas informix y no querían migrar sus bases de datos porque estaban "casados" con una aplicación vieja que vaciaba información en su b.d. en informix.

Otros clientes querían gastar lo menos posible en licencias de b.d. y tuvimos que ajustar la aplicación también para PostgreSQL.

Entonces terminamos con una aplicación la cual con tan sólo mover unos parametros de configuración en un archivo de texto plano, funcionaba para todas esas bases de datos sin hacer cambios en código.

Claro que hubo que realizar muchos ajustes, usar sql estándar en lo posible, generar componentes en java para que las consultas que usaban funciones de fecha y de formateo de números fueran transparentes al momento de ejecutarlas en una base de datos y en otra.

Inclusive también el aspecto de la aplicación cambiaba de acuerdo al cliente, los logos, los colores, usando css´s.

En ocasiones unas funciones de b.d. que usamos en oracle no existían en sqlserver e informix, por lo que tuvimos que generar esas funciones a nivel de b.d. El paquete de instalación de nuestra aplicación incluía scripts de b.d., para crear su estructura, otros scripts para llenar catálogos, otro para configuracion, otro para generar funciones de b.d., etc.

Pero todo esto se puede ver como un caso extremo porque nosotros inclusive consideramos odbc entre las conexiones disponibles.

No te diría que hagas lo que nosotros, porque implica mucho trabajo, pero estaría bien si se pudieran usar las 3 de acuerdo a parámetros de configuración, que fuera flexible.

Saludos.

Imagen de JRios

Gracias...

Agradezco mucho tu comentario y por tener la amabilidad de expresar tu anécdota al respecto, tendré presente en la aplicación los momentos en los cuales pueda plantear cada conexión.
Agradecería si tienes alguna mejora al código como tal.

podrías...

Pues yo dejaría por default la del pool de conexiones, si ya la probaste y funciona lo único que le cambiaría sería la parametrización de los datos de la conexión.

Esto es: que no tenga los datos de la conexión allí mismo en el mismo archivo .java, porque cada que cambies de servidor de base de datos te verás en la necesidad de ir y modificarlos en el archivo .java y hacer la compilación, cosa que no será posible que hagas en el ambiente donde ya vayas a instalar finalmente tu aplicación ( pensando cuando lo instales en los servidores del cliente final )

Generate un archivo .txt con los parámetros

IP_SERVIDOR=192.168.1.201
NOMBRE_BD=MiBaseDeDatos
PUERTO=1433
etc.

Entonces tendrías que leer el archivo de texto plano para recuperar esos parámetros y entonces mandárselos a tu clase de Pool_Conexion.java al método getConnection(String ipServer, String nombreBD, etc...)

Imagen de ezamudio

pool?

Qué tiene que ver pool con las otras dos? jTDS es un driver, y era muy bueno para las versiones viejas de SQL Server pero después por fin MS se puso las pilas y sacaron un driver JDBC4 para SQL Server. jTDS es bueno para Sybase (versiones viejas también). Pero tanto jTDS como el de MS JDBC4 se pueden usar solitos o en conjunto con c3p0, bonecp o commons-dbcp para crear un pool de conexiones.

Imagen de JRios

Pool Conexiones

Lo del pool por que no estaba seguro que fuera asi lo de su configuracion, aunque funciona muy bien, ademas queria saber si era correcto su utilizacion el Swing. El termino de Pool de conexion siempre lo he leido para aplicaciones Web mas no para Swing, por esa razon queria escuchar sus comentarios.
Agradezco mucho la logica de JuanR con respecto a la parametrizacionde los datos de la conexion.
y a ezamudio por aclara las dudas que tenia entre JTDS y JDBC4.

Imagen de genitalico

que tal solo queria opinar

que tal solo queria opinar algo y entender la duda un poco mas y para ello comento lo siguente ..

JTDS 3 y JAR de Microsoft sqljdbc4 (copy&paste de tu titulo) como dice arriba @ezamudio son drivers para comunicarse a la BD como por ejemplo el driver H2 para trabajar con bases de datos H2..bueno en fin

el pool es un "pool", mas bien una tecnica para aprovechar las conexiones a la bd para no hacer el clasico ..
1. abrir programa..
2. abrir conexion a la bd
3. realizar consulta,insertar registro,borrar etc..
4. cerrar conexion a la bd
5. fin del programa o ir al paso 2

no se si me explique en ese asunto, la idea del pool es utilizar la conexion y en lugar de cerrarla la deja libre para el siguiente hilo de ejecucion. No se como sera tu aplicacion pero en muchos casos sencillos no se necesita un pool aun que he leido que recomiendan siempre hacerlo, no se que tan cierto sea.

por otro lado Swing es una biblioteca para hacer tu aplicacion grafica, que nada tiene que ver con el pool o los drivers para las BD, podrias hacer tu aplicacion en modo consola y utilizar un pool o no utilizarlo depende..

dices que ves mas el termino pool en aplicaciones web, esto es asi por que por lo general este tipo de aplicaciones son multiusuario, me refiero a que son usadas por muchos clientes que hacen consultas,crean registros etc.. imaginate que el probre programa este abriendo y cerrando la conexion a la bd cada vez que un usuario hace una transaccion y eso multiplicalo por muchos usuarios, yo creo que no da el ancho el sistema. para eso mejor crear un pool

un saludo