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 Réponses :
Essayez d'ajouter ? useSSL = false
à la fin de l'url de connexion.
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.
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 :)
Je ne sais pas pourquoi cette réponse mérite un vote défavorable. Quelqu'un pourrait-il expliquer? Ai-je oublié quelque chose?
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 >.
Ensuite, je vais voter pour votre réponse, car elle est correcte et j'ai le droit de le faire :)
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 seulementSystem.out.printlnt
un message. Une autre chose: utilisez un IDE qui vous aidera à déterminer quelle exception intercepter spécifiquement. Justecatch 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.