Conecte Java a una base de datos MySQL

¿Cómo se conecta a una base de datos MySQL en Java?

Cuando lo bash, obtengo

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) 

O

 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

DriverManager es una forma bastante antigua de hacer las cosas. La mejor manera es obtener un DataSource , ya sea buscando uno que el contenedor del servidor de la aplicación ya configurado para usted:

 Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB"); 

o instanciar y configurar uno directamente desde su controlador de base de datos:

 MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUser("scott"); dataSource.setPassword("tiger"); dataSource.setServerName("myDBHost.example.org"); 

y luego obtener conexiones de él, igual que arriba:

 Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS"); ... rs.close(); stmt.close(); conn.close(); 

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

  1. Descargue e instale el servidor MySQL . Solo hazlo de la manera habitual. Recuerde el número de puerto cada vez que lo haya cambiado. Es por defecto 3306 .

  2. Descargue el controlador JDBC y coloque el 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 la API de JDBC ( tutorial aquí ).

    Si está utilizando un IDE como Eclipse o Netbeans, puede agregarlo al classpath agregando el archivo JAR como Library a Build Path en las propiedades del proyecto.

    Si lo está haciendo “plain vanilla” en la consola de comandos, entonces necesita especificar la ruta al archivo JAR en el argumento -cp o -classpath al ejecutar su aplicación Java.

      java -cp;; / ruta / a / mysql-connector.jar com.example.YourClass 

    El . está allí para agregar el directorio actual al classpath también para que pueda ubicar com.example.YourClass y the ; es el separador classpath tal como está en Windows. En Unix y clones : deben usarse.

  3. Crea una base de datos en MySQL . Vamos a crear una base de datos javabase . Por supuesto que quieres Dominación Mundial, así que usemos UTF-8 también.

     CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
  4. Crea un usuario para Java y otórgale acceso . Simplemente porque usar 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 la password es la contraseña aquí.

  5. Determine la URL JDBC . Para conectar la base de datos MySQL usando Java necesita una URL JDBC con la siguiente syntax:

      jdbc: mysql: // nombre de host: puerto / 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, entonces 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 lugar de que lo resuelva localhost , entonces tiene un problema en la configuración de red / DNS / hosts.

    • port : el port 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. Esa es javabase .

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

      jdbc: mysql: // localhost: 3306 / javabase 
  6. Pruebe la conexión a MySQL usando Java . Cree una clase Java simple con un método main() 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 , significa que el controlador JDBC no se cargó automáticamente o que el URL de JDBC es incorrecto (es decir, no fue reconocido por ninguno de los controladores cargados). Normalmente, un controlador JDBC 4.0 debe cargarse automáticamente cuando lo suelta en classpath en tiempo de ejecución. Para excluir uno y otro, siempre puede cargarlo manualmente de la siguiente manera:

     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 la llamada newInstance() no es necesaria aquí. Es solo para arreglar el viejo y 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 ha colocado en el classpath.

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

    Si obtiene una SQLException: Connection refused o se Connection timed out o una excepción CommunicationsException: Communications link failure específica de MySQL CommunicationsException: Communications link failure , 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 JDBC es incorrecto.
    2. El servidor DNS local no reconoce el nombre de host en JDBC URL.
    3. El número de puerto falta o está incorrecto en la URL JDBC.
    4. El servidor de bases de datos no funciona.
    5. El servidor de BD no acepta conexiones TCP / IP.
    6. El servidor de base de datos se ha quedado sin conexiones.
    7. Algo entre Java y DB está bloqueando las conexiones, por ejemplo, un firewall o proxy.

    Para resolver uno u otro, siga los siguientes consejos:

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

    Tenga en cuenta que cerrar la Connection es extremadamente importante. Si no cierra las conexiones y sigue obteniendo muchas de ellas en poco tiempo, es posible que la base de datos se quede sin conexiones y que su aplicación se rompa. Adquiera siempre la Connection en una statement try-with-resources . O si aún no está en Java 7, explíquelo al final de un bloque try-finally . El cierre finally es solo para garantizar que también se cierre en caso de una excepción. Esto también se aplica a Statement , PreparedStatement y ResultSet .

Eso fue todo lo que concierne a la conectividad. Aquí puede encontrar un tutorial más avanzado sobre cómo cargar y almacenar objetos de 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 DB es un mal enfoque. Ver entre otras preguntas: http://stackoverflow.com/q/9428573/ . Este es un error de inicio # 1.

Inicializar constantes de base de datos

Crear base de datos de propiedades constantes nombre de usuario, contraseña, URL y controladores, límite de sondeo, etc.

 // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // set your own limit 

Inicializar conexión y propiedades

Una vez que se establece la conexión, es mejor almacenar para fines de reutilización.

 // init connection object private Connection connection; // init properties object private Properties properties; 

Crear propiedades

El objeto de propiedades contiene la información de conexión, verifique si ya está configurada.

 // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } 

Conecte la base de datos

Ahora conéctese a la base de datos usando las constantes y las propiedades inicializadas.

 // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { // Java 7+ e.printStackTrace(); } } return connection; } 

Desconecte la base de datos

Una vez que haya terminado con las operaciones de la base de datos, simplemente cierre la conexión.

 // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } 

Todo junto

Utilice esta clase MysqlConnect directamente después de cambiar la base de datos nombre, nombre de usuario y contraseña, etc.

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class MysqlConnect { // init database constants private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String MAX_POOL = "250"; // init connection object private Connection connection; // init properties object private Properties properties; // create properties private Properties getProperties() { if (properties == null) { properties = new Properties(); properties.setProperty("user", USERNAME); properties.setProperty("password", PASSWORD); properties.setProperty("MaxPooledStatements", MAX_POOL); } return properties; } // connect database public Connection connect() { if (connection == null) { try { Class.forName(DATABASE_DRIVER); connection = DriverManager.getConnection(DATABASE_URL, getProperties()); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } return connection; } // disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } } } 

¿Cómo utilizar?

Inicializa la clase de la base de datos.

 // !_ note _! this is just init // it will not create a connection MysqlConnect mysqlConnect = new MysqlConnect(); 

En otro lugar en tu código …

 String sql = "SELECT * FROM `stackoverflow`"; try { PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql); ... go on ... ... go on ... ... DONE .... } catch (SQLException e) { e.printStackTrace(); } finally { mysqlConnect.disconnect(); } 

Esto es todo 🙂 ¡ Si hay algo para mejorar edítalo! Espero que esto sea útil.

 String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase"; String user = "username"; String password = "password"; // Load the Connector/J driver Class.forName("com.mysql.jdbc.Driver").newInstance(); // Establish connection to MySQL Connection conn = DriverManager.getConnection(url, user, password); 

Aquí está el mínimo que necesita para obtener datos de una base de datos MySQL:

 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/foo", "root", "password"); Statement stmt = conn.createStatement(); stmt.execute("SELECT * FROM `FOO.BAR`"); stmt.close(); conn.close(); 

Agregue manejo de excepciones, configuración, etc. al gusto.

Conexión JDBC de MySQL con useSSL.

 private String db_server = BaseMethods.getSystemData("db_server"); private String db_user = BaseMethods.getSystemData("db_user"); private String db_password = BaseMethods.getSystemData("db_password"); private String connectToDb() throws Exception { String jdbcDriver = "com.mysql.jdbc.Driver"; String dbUrl = "jdbc:mysql://" + db_server + "?verifyServerCertificate=false" + "&useSSL=true" + "&requireSSL=true"; System.setProperty(jdbcDriver, ""); Class.forName(jdbcDriver).newInstance(); Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password); Statement statement = conn.createStatement(); String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\""; ResultSet resultSet = statement.executeQuery(query); resultSet.next(); return resultSet.getString(1); } 

necesita tener el contenedor de conector mysql en su classpath.

en Java JDBC API hace todo con bases de datos. usando JDBC podemos escribir aplicaciones Java para
1. Enviar consultas o actualizar SQL a DB (cualquier base de datos relacional) 2. Recuperar y procesar los resultados de DB

con menos de tres pasos podemos recuperar datos de cualquier base de datos

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } 

Código corto y dulce.

 try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root",""); //Database Name - testDB, Username - "root", Password - "" System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

Para el servidor SQL 2012

 try { String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; //KHILAN is Host and 1433 is port number Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("Driver Loaded"); conn = DriverManager.getConnection(url); System.out.println("Connected..."); } catch(Exception e) { e.printStackTrace(); } 

Puede ver todos los pasos para conectar la base de datos MySQL desde la aplicación Java aquí . Para otra base de datos, solo necesita cambiar el controlador en el primer paso solamente. Asegúrese de proporcionar la ruta de acceso correcta a la base de datos y el nombre de usuario y la contraseña correctos.

Visita http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

Connection que estaba usando hace un tiempo, parecía la forma más fácil, pero también había una recomendación para hacerla if

 Connection con = DriverManager.getConnection( "jdbc:myDriver:DatabaseName", dBuserName, dBuserPassword); if (con != null){ //..handle your code there } 

O algo así de esa manera 🙂

Probablemente hay algún caso, mientras que getConnection puede devolver null 🙂

Conexión MySql JDBC:

 Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password"); Statement stmt=con.createStatement(); stmt = con.createStatement(); ResultSet rs=stmt.executeQuery("Select * from Table"); 

Código corto

 public class DB { public static Connection c; public static Connection getConnection() throws Exception { if (c == null) { Class.forName("com.mysql.jdbc.Driver"); c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password"); } return c; } // Send data TO Database public static void setData(String sql) throws Exception { DB.getConnection().createStatement().executeUpdate(sql); } // Get Data From Database public static ResultSet getData(String sql) throws Exception { ResultSet rs = DB.getConnection().createStatement().executeQuery(sql); return rs; } }