1
votes

Comment récupérer des éléments d'une base de données dans un programme JDBC

J'ai essayé un programme de base pour récupérer des données d'une table de base de données dans un programme java. À la fin de la compilation, lors de l'exécution du code, une exception se produit. Aucune erreur n'est affichée dans la console. Il affiche le message d'exception

Fri Jan 17 19:34:24 IST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

An Exception error occured while processing JDBC programme

Voici le résultat obtenu dans ma fenêtre de console

import java.sql.*;
public class class1 {
    public static void main(String args[]){
        String url = "jdbc:mysql://localhost:3306//orders";
        String username = "root";
        String password = "Luxan@22";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, username, password);
            Statement st = con.createStatement();
            ResultSet rs =  st.executeQuery("SELECT CUST_NAME FROM CUSTOMERS");
            System.out.println("List of Registered customers: ");
            while(rs.next()){
                System.out.println(rs.getString("cust_name"));
            }
            st.close();
            con.close();
        }
        catch(Exception e){
            System.out.println("An Exception error occured while processing JDBC programme");
        }
    }
}


3 commentaires

La méthode appropriée pour consigner les exceptions est Logger.getLogger (class1.class) .log (Level.SEVERE, "Une erreur d'exception s'est produite lors du traitement du programme JDBC", e); pas seulement System.out.printlnt un message. Une autre chose: utilisez un IDE qui vous aidera à déterminer quelle exception intercepter spécifiquement. Juste catch Exception est trop générique et avalera tout à votre insu. Ensuite, une fois que vous lancez correctement votre exception, vous obtiendrez un Stacktrace que vous pourrez lire. Lisez la première ligne pour savoir quel est le problème, puis recherchez un à ... où vous voyez où il est déclenché


Vous avez perdu des informations en échouant à imprimer la trace de pile entière. Le message que vous avez imprimé est inutile - vous ne savez même pas quelle était l'exception. L'URL de connexion que vous avez devrait être correcte. Je recommanderais de NE PAS utiliser les informations d'identification racine dans aucune application. L'accès et les autorisations d'administration et d'application doivent être séparés.


Veuillez utiliser e.printStackTrace () dans votre bloc catch et postez la trace de pile résultante dans votre question.


3 Réponses :


0
votes

Essayez d'ajouter ? useSSL = false à la fin de l'url de connexion.


2 commentaires

après avoir ajouté que le message d'avertissement n'est pas affiché. Mais le code fonctionne toujours avec une exception. Mes commandes de base de données ont une table nommée clients et elle est chargée de données


Essayez d'écrire e.printStackTrace (); dans le bloc de cas. Le message de l'exception réelle peut vous aider à trouver un problème.



0
votes

Il est difficile de voir ce qui n'a pas fonctionné sans connaître la structure de votre table. Mais voici une autre façon d'écrire votre programme. Peut-être que cela vous aide à vous rapprocher de votre objectif:

public class Class1 {

    public static void main(String[] args) {

        try {
            Class.forName("com.mysql.jdbc.Driver");   // this line is optional since Java 1.6 Normally for MySQL you shouldn't have to do this
            // This is called "try-with-resources". It means that inside your "try" declaration you
            // tell Java what things you want to open (here you wnat to open a connection)
            // and it will automatically close any connection (on failure or success) for you
            try (
                    Connection connection = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/orders", // before the database name there is only one /
                            "root", // the database user
                            "password"); // the password
                    Statement statement = connection.createStatement() // the same try-with resources can open the statement for your
                    ) {

                ResultSet rs = statement.executeQuery("SELECT CUST_NAME FROM CUSTOMERS");
                while (rs.next()) {
                    System.out.println(rs.getString("cust_name"));
                }

            } catch (SQLException ex) {
                Logger.getLogger(Class1.class).log(Level.SEVERE, null, ex);   // this will properly log your SQLException. Don't be afraid, SQL error messages are scary and Java Exceptions are impressive. But they will tell you where the problem is
            }
        } catch (ClassNotFoundException ex) {   // if you register your driver you need to catch the exception as well
            Logger.getLogger(Class1.class).log(Level.SEVERE, null, ex);
        }
    }
}

Vous pouvez en savoir plus sur cet exemple sur MkYong .

J'espère que cela vous aidera.

Encore une chose:

Les noms de classe commencent par une lettre majuscule: Class1 au lieu de class1 . Parce que les noms de variables commencent par une petite lettre. Imaginez que vous vouliez créer une instance d'une classe appelée car . Ensuite, vous diriez car car = new car (); qui est illisible. Car car = new Car () est cependant clair :)


1 commentaires

Je ne sais pas pourquoi cette réponse mérite un vote défavorable. Quelqu'un pourrait-il expliquer? Ai-je oublié quelque chose?



1
votes

Le problème vient de votre URL. Remplacez

"jdbc:mysql://localhost:3306/orders"

par

"jdbc:mysql://localhost:3306//orders"

Notez que j'ai supprimé un / avant les commandes code >.


1 commentaires

Ensuite, je vais voter pour votre réponse, car elle est correcte et j'ai le droit de le faire :)