J'écris une application Java qui doit insérer des données dans la base de données MySQL via JDBC. Voici le code correspondant:inattendu java.lang.NoClassDefFoundError lors de l'appel de DriverManager.getConnection()
public JDBCDecoder() {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Loaded MySQL JDBC driver");
} catch (ClassNotFoundException e) {
System.out.println("Exception attempting to load MySQL JDBC driver");
}
String url = "jdbc:mysql://localhost/db";
Properties props = new Properties();
props.put("user", "root");
props.put("password", "root");
try {
conn = DriverManager.getConnection(url, props);
conn.setAutoCommit(false);
} catch (SQLException e) {
Throwables.propagate(e);
}
....
}
Voici la trace de la pile d'erreur que je suis arrivé après avoir essayé d'exécuter le code:
java.lang.NoClassDefFoundError: Could not initialize class oracle.jdbc.OracleDriver
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at java.sql.DriverManager.getCallerClass(DriverManager.java:477)
at java.sql.DriverManager.getConnection(DriverManager.java:576)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at exportclient.JDBCExportClient$JDBCDecoder.<init>(JDBCExportClient.java:179)
at exportclient.JDBCExportClient.constructExportDecoder(JDBCExportClient.java:604)
at export.processors.GuestProcessor$1.run(GuestProcessor.java:113)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at utils.CoreUtils$1$1.run(CoreUtils.java:259)
at java.lang.Thread.run(Thread.java:680)
qui me semble bizarre parce que: 1) Je ne suis pas en train de se connecter à Base de données Oracle 2) en fait j'ai un ojdbc6.jar (qui contient oracle.jdbc.OracleDriver) dans mon classpath. Donc, je suis complètement ignorant pourquoi cette erreur arriverait.
Toute suggestion sera appréciée. Merci d'avance!
Il devrait y avoir une cause racine pour cela ... Pouvez-vous s'il vous plaît poster la pleine stacktrace? –
@CristianMeneses Merci pour votre commentaire! J'ai mis à jour la trace de la pile. – quantumrose
Pouvez-vous poster aussi le code pour votre classe? Je suppose qu'il n'est pas complet parce que votre 'Class.forName (..)} n'est pas enveloppé sur un bloc' try/catch' –