sql >> Base de Datos >  >> RDS >> Mysql

Conectar Java a una base de datos MySQL

Aquí hay una explicación paso a paso de cómo instalar MySQL y JDBC y cómo usarlo:

  1. Descargar e instalar el servidor MySQL . Solo hazlo de la manera habitual. Recuerde el número de puerto siempre que lo haya cambiado. Es por defecto 3306 .

  2. Descargar el controlador JDBC y poner en classpath , extraiga el archivo ZIP y coloque el archivo JAR que lo contiene en el classpath. El controlador JDBC específico del proveedor es una implementación concreta de API de JDBC (tutorial aquí ).

    Si está utilizando un IDE como Eclipse o Netbeans, puede agregarlo al classpath agregando el archivo JAR como Biblioteca a la ruta de construcción en las propiedades del proyecto.

    Si lo está haciendo "simplemente convencional" en la consola de comandos, debe especificar la ruta al archivo JAR en el -cp o -classpath argumento al ejecutar su aplicación Java.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    El . solo está ahí para agregar el actual directorio a classpath también para que pueda ubicar com.example.YourClass y el ; es el separador de classpath tal como está en Windows. En Unix y clones : debe usarse.

  3. Cree una base de datos en MySQL . Vamos a crear una base de datos javabase . Por supuesto que quieres dominar el mundo, así que usemos UTF-8 también.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Crear un usuario para Java y grant accede . Simplemente porque usando root es una mala práctica.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Sí, java es el nombre de usuario y password es la contraseña aquí.

  5. Determinar la URL de JDBC . Para conectar la base de datos MySQL usando Java, necesita una URL de JDBC con la siguiente sintaxis:

    jdbc:mysql://hostname:port/databasename
    • hostname :El nombre de host donde está instalado el servidor MySQL. Si está instalado en la misma máquina donde ejecuta el código Java, puede usar localhost . También puede ser una dirección IP como 127.0.0.1 . Si encuentra problemas de conectividad y usa 127.0.0.1 en lugar de localhost lo resolvió, entonces tiene un problema en su configuración de red/DNS/hosts.

    • port :El puerto TCP/IP donde escucha el servidor MySQL. Esto es por defecto 3306 .

    • databasename :El nombre de la base de datos a la que desea conectarse. Eso es javabase .

    Entonces, la URL final debería verse así:

    jdbc:mysql://localhost:3306/javabase
  6. Prueba la conexión a MySQL usando Java . Cree una clase Java simple con un main() método para probar la conexión.

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    Si obtiene una SQLException: No suitable driver , entonces significa que el controlador JDBC no se cargó automáticamente o que la URL de JDBC es incorrecta (es decir, no fue reconocida por ninguno de los controladores cargados). Normalmente, un controlador JDBC 4.0 debe cargarse automáticamente cuando lo coloca en la ruta de clase en tiempo de ejecución. Para excluir uno y otro, siempre puede cargarlo manualmente como se muestra a continuación:

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    Tenga en cuenta que newInstance() la llamada es no necesario aquí. Es solo para arreglar el viejo y defectuoso org.gjt.mm.mysql.Driver . Explicación aquí . Si esta línea arroja ClassNotFoundException , entonces el archivo JAR que contiene la clase de controlador JDBC simplemente no se colocó en el classpath.

    Tenga en cuenta que no necesita cargar el controlador siempre antes conectando Solo una vez durante el inicio de la aplicación es suficiente.

    Si obtiene una SQLException: Connection refused o Connection timed out o una CommunicationsException: Communications link failure específica de MySQL , entonces significa que no se puede acceder a la base de datos. Esto puede tener una o más de las siguientes causas:

    1. La dirección IP o el nombre de host en la URL de JDBC son incorrectos.
    2. El servidor DNS local no reconoce el nombre de host en la URL de JDBC.
    3. Falta el número de puerto o es incorrecto en la URL de JDBC.
    4. El servidor DB está inactivo.
    5. El servidor DB no acepta conexiones TCP/IP.
    6. El servidor DB se ha quedado sin conexiones.
    7. Algo entre Java y DB está bloqueando las conexiones, p. un cortafuegos o proxy.

    Para solucionar lo uno o lo otro, sigue los siguientes consejos:

    1. Verifíquelos y pruébelos con ping .
    2. Actualice el DNS o use la dirección IP en la URL de JDBC en su lugar.
    3. Verifíquelo según my.cnf de base de datos MySQL.
    4. Inicie la base de datos.
    5. Verifique si mysqld se inicia sin la opción --skip-networking option .
    6. Reinicie la base de datos y corrija su código de manera que cierre las conexiones en finally .
    7. Desactive el cortafuegos y/o configure el cortafuegos/proxy para permitir/reenviar el puerto.

    Tenga en cuenta que al cerrar la Connection es extremadamente importante. Si no cierra las conexiones y sigue obteniendo muchas en poco tiempo, es posible que la base de datos se quede sin conexiones y que la aplicación se rompa. Adquirir siempre la Connection en un try-with-resources declaración . O si aún no está en Java 7, ciérrelo explícitamente en finally de un try-finally cuadra. Cerrando en finally es solo para asegurarse de que también se cierre en caso de una excepción. Esto también se aplica a Statement , PreparedStatement y ResultSet .

Eso fue todo en lo que respecta a la conectividad. Puede encontrar aquí un tutorial más avanzado sobre cómo cargar y almacenar objetos modelo de Java completos en una base de datos con la ayuda de una clase DAO básica.

Usar un patrón Singleton para la conexión de base de datos es un mal enfoque. Ver entre otras preguntas:http://stackoverflow.com/q/9428573/ . Este es un error de principiante n.º 1.