El siguiente objetivo es conectarse a la base de datos, para lo cual básicamente hay que realizar dos pasos:
Ejemplos de carga dinámica:
La conexión usa una sintaxis semejante a la de una URL. La sintaxis de la URL (los corchetes indican elementos opcionales) es la siguiente:
jdbc:Controlador://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
Notas a la sintaxis de la URL:
Ejemplos de conexión:
A continuación el primer ejemplo (es una sencilla aplicación en modo texto) con registro dinámico del controlador (driver) y la conexión mediante DriverManager.getConnection, en la llamada a este método el segundo y tercer argumento son el login y el password. Contiene comentarios detallados:
package jdbc01;
import java.sql.DriverManager;
import java.sql.Connection;
import java.lang.ClassNotFoundException;
import java.sql.SQLException;
public class jdbc01_conexion2 {
public static void main(String[] args) {
try {
/**** Cargamos el driver ****/
Class.forName("com.mysql.jdbc.Driver");
/**** Realizamos la conexión ****/
Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/prueba", "root", "palabra" );
/**** Ok: avisamos ****/
System.out.println( "Si he llegado hasta aquí es que se ha producido la conexión");
System.out.println( "Si no se hubiera producido, se habría disparado SQLException");
/**** Una buena costumbre: cerramos la conexión ****/
con.close();
}
/**** Excepción que se dispara si falla la carga del driver ****/
catch( ClassNotFoundException e ) { e.printStackTrace(); }
/**** Excepción que se dispara si falla la conexión *****/
catch ( SQLException e) { e.printStackTrace(); }
}
}
Aunque el código del ejemplo anterior está documentado, vamos a repasar algunos conceptos:
Si he llegado hasta aquí es que se ha producido la conexión Si no se hubiera producido, se habría disparado SQLException
En el segundo ejemplo podemos observar:
jdbc.drivers=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/prueba jdbc.username=root jdbc.password=palabra
Para cargar en memoria esta información el proceso es muy simple, tanto que se puede hacer todo en tres líneas:
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class jdbc01_conexion3 {
public static void main(String[] args) {
try {
/*** Abrimos flujo de entrada y cargamos el contenido en props ****/
Properties props = new Properties();
FileInputStream in = new FileInputStream("database.properties");
props.load(in); // Cargamos el contenido del flujo en props
in.close();
/**** Obtenemos las propiedades del objeto props ***/
/*** Para registrar de manera estática (setProperty) el driver ***/
String drivers = props.getProperty("jdbc.drivers");
if (drivers != null)
System.setProperty("jdbc.drivers", drivers); // Cargamos driver
/*** Para la conexión ***/
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
/*** Conexión ****/
Connection con = DriverManager.getConnection( url, username, password );
}
catch (SQLException e) { e.printStackTrace(); }
catch (SecurityException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
En el siguiente ejemplo utilizamos un registro dinámico y además utilizamos un archivo .log para ver los eventos que suceden en la conexión JDBC, para lo cual utilizamos la función setLogWriter():
import java.sql.DriverManager;
import java.sql.Connection;
import java.lang.ClassNotFoundException;
import java.sql.SQLException;
import java.io.FileOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
public class jdbc01_conexion4 {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
activar_log( "ejemplo.log" );
Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/prueba", "root", "palabra" );
}
catch( ClassNotFoundException e ) { e.printStackTrace(); }
catch (SQLException e) { e.printStackTrace(); }
}
public static void activar_log( String archivo ) {
try {
FileOutputStream fs = new FileOutputStream(new File(archivo));
PrintWriter p = new PrintWriter(fs, true);
DriverManager.setLogWriter(p);
}
catch (IOException e) { e.printStackTrace(); }
}
}
En el archivo log aparece la carga de controlador y la conexión:
DriverManager.getConnection("jdbc:mysql://localhost/prueba")
trying driver[className=com.mysql.jdbc.Driver,com.mysql.jdbc.Driver@5224ee]
getConnection returning driver[className=com.mysql.jdbc.Driver,com.mysql.jdbc.Driver@5224ee]
Si tienes curiosidad, puedes provocar un error de conexión y verás que aparece descrito en el archivo log.