Connecter Java à une firebase database MySQL

Comment vous connectez-vous à une firebase database MySQL en Java?

Quand j’essaye, je reçois

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) 

Ou

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

DriverManager est une manière assez ancienne de faire les choses. Le meilleur moyen est d’obtenir un DataSource , soit en cherchant un composant que le conteneur de votre serveur d’application a déjà configuré pour vous:

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

ou en instanciant et en configurant un directement depuis votre pilote de firebase database:

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

et ensuite obtenir des connexions, comme ci-dessus:

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

Voici une explication détaillée de l’installation de MySQL et de JDBC et de son utilisation:

  1. Téléchargez et installez le serveur MySQL . Faites-le comme d’habitude. Rappelez-vous le numéro de port chaque fois que vous l’avez modifié. C’est par défaut 3306 .

  2. Téléchargez le pilote JDBC et placez-le dans classpath , extrayez le fichier ZIP et placez le fichier JAR contenant dans le classpath. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de l’ API JDBC ( tutoriel ici ).

    Si vous utilisez un IDE comme Eclipse ou Netbeans, vous pouvez l’append au classpath en ajoutant le fichier JAR en tant que Library au chemin de génération dans les propriétés du projet.

    Si vous le faites “plain vanilla” dans la console de commande, vous devez spécifier le chemin du fichier JAR dans l’argument -classpath ou -classpath lors de l’exécution de votre application Java.

      java -cp.; / chemin / vers / mysql-connector.jar com.example.YourClass 

    Le . est juste là pour append le répertoire actuel au chemin de classe aussi bien qu’il puisse localiser com.example.YourClass et le ; est le séparateur de classpath tel qu’il est dans Windows. Dans Unix et les clones : doivent être utilisés.

  3. Créez une firebase database dans MySQL . Créons une firebase database javabase . Bien sûr, vous voulez la World Domination, alors utilisons UTF-8 également.

     CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
  4. Créez un utilisateur pour Java et accordez- lui l’access . Tout simplement parce que l’utilisation de root est une mauvaise pratique.

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

    Oui, java est le nom d’utilisateur et le password est le mot de passe ici.

  5. Déterminez l’URL JDBC . Pour connecter la firebase database MySQL à l’aide de Java, vous avez besoin d’une URL JDBC dans la syntaxe suivante:

      jdbc: mysql: // hostname: port / databasename 
    • hostname : Le nom d’hôte sur lequel le serveur MySQL est installé. Si elle est installée sur la même machine que celle sur laquelle vous exécutez le code Java, vous pouvez simplement utiliser localhost . Il peut également s’agir d’une adresse IP comme 127.0.0.1 . Si vous rencontrez des problèmes de connectivité et que vous utilisez 127.0.0.1 au lieu de localhost , vous rencontrez un problème dans votre configuration réseau / DNS / hôtes.

    • port : port TCP / IP sur lequel le serveur MySQL écoute. C’est par défaut 3306 .

    • databasename : nom de la firebase database à laquelle vous souhaitez vous connecter. C’est la javabase .

    Donc, l’URL finale devrait ressembler à ceci:

      jdbc: mysql: // localhost: 3306 / javabase 
  6. Testez la connexion à MySQL en utilisant Java . Créez une classe Java simple avec une méthode main() pour tester la connexion.

     Ssortingng url = "jdbc:mysql://localhost:3306/javabase"; Ssortingng username = "java"; Ssortingng 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 vous obtenez une SQLException: No suitable driver , cela signifie que le pilote JDBC n’a pas été chargé automatiquement ou que l’URL JDBC est incorrecte (c’est-à-dire qu’elle n’a été reconnue par aucun des pilotes chargés). Normalement, un pilote JDBC 4.0 devrait être chargé automatiquement lorsque vous le déposez dans le classpath d’exécution. Pour exclure l’un et l’autre, vous pouvez toujours le charger manuellement comme ci-dessous:

     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); } 

    Notez que l’appel newInstance() n’est pas nécessaire ici. C’est juste pour réparer l’ancien et buggy org.gjt.mm.mysql.Driver . Explication ici . Si cette ligne renvoie une ClassNotFoundException , le fichier JAR contenant la classe de pilote JDBC n’est tout simplement pas placé dans le chemin de classe.

    Notez que vous n’avez pas besoin de charger le pilote à chaque fois avant de vous connecter. Une seule fois au démarrage de l’application suffit.

    Si vous obtenez une SQLException: Connection refused ou Connection timed out SQLException: Connection refused une SQLException: Connection refused CommunicationsException: Communications link failure MySQL spécifique CommunicationsException: Communications link failure , cela signifie que la firebase database n’est pas accessible du tout. Cela peut avoir une ou plusieurs des causes suivantes:

    1. L’adresse IP ou le nom d’hôte dans l’URL JDBC est incorrect.
    2. Le nom d’hôte dans l’URL JDBC n’est pas reconnu par le serveur DNS local.
    3. Le numéro de port est manquant ou incorrect dans l’URL JDBC.
    4. Le serveur de firebase database est en panne.
    5. Le serveur de firebase database n’accepte pas les connexions TCP / IP.
    6. Le serveur de firebase database est à court de connexions.
    7. Quelque chose entre Java et DB bloque les connexions, par exemple un pare-feu ou un proxy.

    Pour résoudre l’un ou l’autre, suivez les conseils suivants:

    1. Vérifiez et testez-les avec ping .
    2. Actualisez DNS ou utilisez plutôt l’adresse IP dans l’URL JDBC.
    3. Vérifiez-le basé sur my.cnf de MySQL DB.
    4. Démarrer la firebase database.
    5. Vérifiez si mysqld est démarré sans l’ --skip-networking option .
    6. Redémarrez la firebase database et corrigez votre code en conséquence pour qu’il ferme les connexions.
    7. Désactivez le pare-feu et / ou configurez le pare-feu / proxy pour autoriser / transférer le port.

    Notez que la fermeture de la Connection est extrêmement importante. Si vous ne fermez pas les connexions et que vous en recevez beaucoup en peu de temps, la firebase database risque de ne plus avoir de connexions et votre application risque de ne plus fonctionner. Toujours acquérir la Connection dans une déclaration try-with-resources . Ou, si vous n’êtes pas encore sur Java 7, fermez-le explicitement dans un bloc try-finally . La fermeture finally est juste pour s’assurer qu’elle est également fermée en cas d’exception. Cela s’applique également à Statement , PreparedStatement et ResultSet .

C’était tout ce qui concernait la connectivité. Vous pouvez trouver ici un didacticiel plus avancé sur la façon de charger et de stocker des objects de modèle Java complets dans une firebase database à l’aide d’une classe DAO de base.


L’utilisation d’un modèle Singleton pour la connexion à la firebase database est une mauvaise approche. Voir entre autres questions: http://stackoverflow.com/q/9428573/ . Ceci est une erreur de démarrage n ° 1.

Initialiser les constantes de la firebase database

Créez le nom d’utilisateur, le mot de passe, l’URL et les pilotes de la firebase database de propriétés constantes, la limite d’interrogation, etc.

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

Initialiser la connexion et les propriétés

Une fois la connexion établie, il est préférable de stocker les données à des fins de réutilisation.

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

Créer des propriétés

L’object Propriétés contient les informations de connexion, vérifiez s’il est déjà défini.

 // 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; } 

Connecter la firebase database

Connectez-vous maintenant à la firebase database en utilisant les constantes et les propriétés initialisées.

 // 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; } 

Déconnecter la firebase database

Une fois les opérations de firebase database terminées, fermez la connexion.

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

Tout ensemble

Utilisez cette classe MysqlConnect directement après avoir changé MysqlConnect , nom d’utilisateur et mot de passe, 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 Ssortingng DATABASE_DRIVER = "com.mysql.jdbc.Driver"; private static final Ssortingng DATABASE_URL = "jdbc:mysql://localhost:3306/database_name"; private static final Ssortingng USERNAME = "root"; private static final Ssortingng PASSWORD = ""; private static final Ssortingng 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(); } } } } 

Comment utiliser?

Initialiser la classe de firebase database.

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

Quelque part ailleurs dans votre code …

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

C’est tout 🙂 Si quelque chose pour améliorer le modifier! J’espère que c’est utile.

 Ssortingng url = "jdbc:mysql://127.0.0.1:3306/yourdatabase"; Ssortingng user = "username"; Ssortingng 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); 

Voici le minimum nécessaire pour extraire des données d’une firebase database 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(); 

Ajoutez le traitement des exceptions, la configuration etc. à votre goût.

MySQL JDBC Connexion avec useSSL.

 private Ssortingng db_server = BaseMethods.getSystemData("db_server"); private Ssortingng db_user = BaseMethods.getSystemData("db_user"); private Ssortingng db_password = BaseMethods.getSystemData("db_password"); private Ssortingng connectToDb() throws Exception { Ssortingng jdbcDriver = "com.mysql.jdbc.Driver"; Ssortingng 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(); Ssortingng query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\""; ResultSet resultSet = statement.executeQuery(query); resultSet.next(); return resultSet.getSsortingng(1); } 

Vous devez avoir un connecteur mysql dans votre classpath.

en Java, l’API JDBC crée tout avec des bases de données. en utilisant JDBC, nous pouvons écrire des applications Java pour
1. Envoyer des requêtes ou mettre à jour SQL vers DB (n’importe quelle firebase database relationnelle) 2. Récupérer et traiter les résultats de la firebase database

avec moins de trois étapes, nous pouvons récupérer des données à partir de n’importe quelle firebase database

 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"); Ssortingng s = rs.getSsortingng("b"); float f = rs.getFloat("c"); } 

Code court et doux.

 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(); } 

Pour SQL Server 2012

 try { Ssortingng 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(); } 

Vous pouvez voir toutes les étapes pour connecter la firebase database MySQL à partir de l’application Java ici . Pour les autres bases de données, il vous suffit de changer le pilote dans la première étape seulement. Assurez-vous de bien définir le chemin d’access à la firebase database et de corriger le nom d’utilisateur et le mot de passe.

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

Connection j’utilisais il y a quelque temps, cela ressemblait à la manière la plus simple, mais il y avait aussi des recommandations pour y aller if déclaration – exactement

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

Ou quelque chose comme ça 🙂

Il y a probablement des cas, alors que getConnection peut retourner null 🙂

Connexion 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"); 

Petit code

 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(Ssortingng sql) throws Exception { DB.getConnection().createStatement().executeUpdate(sql); } // Get Data From Database public static ResultSet getData(Ssortingng sql) throws Exception { ResultSet rs = DB.getConnection().createStatement().executeQuery(sql); return rs; } }