Conectar MySQL con Java (NetBeans)

Explicare de la forma más clara que me sea posible como conectar a MySQL utilizando Java en Netbeans, partiré de la idea que ya tenéis un proyecto montado y lo que os hace falta es lograr la conexión con la base de datos, ademas supondre que posees conocimientos básicos de MySQL y de Java. Sin embargo puede que algunos de los enlaces a continuación te sean utiles antes de comenzar:


*Si corres sobre Windows te recomiendo usar una herramienta muy simple para gestionar MySQL llamada easyphp… para mayor información referiri a: http://www.easyphp.org/index.php, para la descarga:


*Si empleas Linux quizás quieras usar Xampp, similar a easyphp… para màs información: http://www.apachefriends.org/en/xampp-linux.html, para la descarga:






Una vez todo listo (Netbeans y MySQL instalados en nuestro equipo) procedemos a copiar el archivo mysql-connector-java-5.1.5-bin.jar en los siguientes directorios:

En mi caso:

/home/jimenez/jdk1.6.0_03/jre/lib/ext

/home/jimenez/jdk1.6.0_03/bin

De ser en otro equipo posiblemente sea algo así:

C:\Archivos de programa\Java\jdk1.6.0_01/jre/lib/ext

C:\Archivos de programa\Java\jdk1.6.0_01/bin

El punto es que debes buscar el directorio donde tienes instalado el JDK y a partir de ahí los directorios anteriormente indicados. Esto es importante para que así Netbeans se pueda conectar a la base de datos y no de error en “classForName=’com.mysql.jdbc.Driver’ Not Found”.

Una vez hecho esto entramos propiamente en la conexión con Java.

Primeramente se debe importar el controlador JDBC mediante la instrucción:
classForName="com.mysql.jdbc.Driver";

Luego establecer la conección con el JDBC mediante un string de conección URL:

url = "jdbc:mysql://localhost:3306/Nombre_De_La_Base_De_Datos";

Además se debe establecer el nombre de usuario y la contraseña para la conexión:

login = "root";
password = "";

Ya por último el objeto Connection que será utilizado para comunicarnos con la base de datos através de la aplicación, este proporciona métodos para manejar el procesamiento de transacciones, para crear objetos y ejecutar instrucciones SQL y procedimientos almacenados.

Connection connection;

Muy Bien! Después de una rápida revisión del asunto pasamos finalmente a crear la siguiente clase en nuestro proyecto con el nombre de DataBase.java

Nota: Para este ejemplo empleo una base de datos llamada “Universidad”, además he instalado MySQL con la configuración predeterminada, si por ejemplo modificaste el puerto, sustituye el string URL donde dice “3306” por el puerto correspondiente, tampoco he establecido contraseña alguna por lo que he dejado el string password vacio, básicamente si instalaste con las opciones preestablecidas no tendrás ningún problema.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DataBase {

    public static Connection connection;

    public static String login = "root";
    public static String password = "";
    public static String url = "jdbc:mysql://localhost:3306/ Universidad";
    public static String classForName="com.mysql.jdbc.Driver";

    public static void Connect() { //conecta con la base de datos
        try{
            Class.forName(DataBase.classForName).newInstance();
            connection = DriverManager.getConnection(DataBase.url,DataBase.login,DataBase.password);
        } catch (InstantiationException ex) {
            Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
        }catch(SQLException ex){
            System.out.println(ex.getMessage());
        }catch(ClassNotFoundException ex){
            System.out.println(ex.getMessage());
        }
    }

    public static void Disconnect(){ //se desconecta de la base de datos
        try {
            connection.close();
        } catch (SQLException ex) {
            Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Muy Bien! A este punto la cosa ya debe funcionar, sin embargo aun no hemos añadido ningun registro!

Prmero se debe conectar a la base de datos:

DataBase.Connect();

luego crear un objeto Statement que controla la declaración SQL:

Statement statement = DataBase.connection.createStatement();

de forma consecuente ejecutamos el objeto:

statement.executeUpdate("INSERT INTO estudiantes(carnet,nombre) VALUES('A77662','Mario')");

lo finalizamos:

statement.close();

y desconectaos de la base de datos:

DataBase.Disconnect();

De forma breve explicare los siguientes métodos del objeto Statement


execute( ) : Se usa principalmente cuando una sentencia SQL regresa varios

conjuntos de resultados. Esto ocurre principalmente cuando se está
haciendo uso de procedimientos almacenados.


executeUpdate( ): Este método se utiliza con instrucciones SQL de manipulación de

datos tales como INSERT, DELETE o UPDATE.


executeQuery( ): Se usa en las instrucciones del tipo SELECT.


Muy bien, funcionaría de la siguiente forma para insertar un registro:


try {
    DataBase.Connect();//se conecta
    java.sql.Statement statement = DataBase.connection.createStatement();//crea el objeto statement
    statement.executeUpdate("INSERT INTO estudiantes(carnet,nombre) VALUES('A77662','Mario')");//ejecuta la sentencia SQL
    statement.close();//cierra el objeto
    DataBase.Disconnect();//desconecta de la base de datos
} catch (java.sql.SQLException ex) {
    java.util.logging.Logger.getLogger("SQL").log(java.util.logging.Level.SEVERE, null, ex);
    System.out.println(ex.getMessage());
}


Me gusta trabajar de la siguiente manera, a la clase DataBase le agregamos el método “ExecuteUpdateQuery” y “·ExecuteQuery”, así:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DataBase {

  public static Connection connection;

  public static String login = "root";
  public static String password = "";
  public static String url = "jdbc:mysql://localhost:3306/Universidad";
  public static String classForName="com.mysql.jdbc.Driver";

  public static void Connect() { //conecta con la base de datos 
      try{                
          Class.forName(DataBase.classForName).newInstance();
          connection = DriverManager.getConnection(DataBase.url,DataBase.login,DataBase.password); 
      } catch (InstantiationException ex) {
          Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
      } catch (IllegalAccessException ex) {
          Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
      }catch(SQLException ex){
          System.out.println(ex.getMessage());
      }catch(ClassNotFoundException ex){
          System.out.println(ex.getMessage());
      }
  }

  public static void Disconnect(){ //se desconecta de la base de datos       
      try {
          connection.close();
      } catch (SQLException ex) {
          Logger.getLogger(DataBase.class.getName()).log(Level.SEVERE, null, ex);
      }     
  }

  public static void ExecuteUpdateQuery(String querySQL){
      try {
          DataBase.Connect();
          java.sql.Statement statement = DataBase.connection.createStatement();
          statement.executeUpdate(querySQL);
          statement.close();
          DataBase.Disconnect();
      } catch (java.sql.SQLException ex) {
          java.util.logging.Logger.getLogger("SQL").log(java.util.logging.Level.SEVERE, null, ex);
          System.out.println(ex.getMessage());
      }
  }

  public static void ExecuteQuery(String querySQL){
      try {
          DataBase.Connect();
          java.sql.Statement statement = DataBase.connection.createStatement();
          statement.execute(querySQL);
          statement.close();
          DataBase.Disconnect();
      } catch (java.sql.SQLException ex) {
          java.util.logging.Logger.getLogger("SQL").log(java.util.logging.Level.SEVERE, null, ex);
          System.out.println(ex.getMessage());
      }
  }
}

Y a la hora de insertar un registro el asunto se simplifica así:

String sql="INSERT INTO estudiantes(carnet,nombre)VALUES('A77662','Mario')";
DataBase.ExecuteQuery(sql);
Solo hay que tener presente cuando llamar a ExecuteUpdate o ExecuteQuery. Recuerda que es importante tener iniciado MySQL para que la conexión sea exitosa!