2010-10-24 7 views
17

Ich versuche, H2 verwenden, um eine Verbindung zu einer Datenbank in Java (mit Eclipse als die IDE). Die Probe wirft (unten) eine ClassNotFoundException. Die Sache ist, ich tat fügen Sie die h2 JAR-Datei zum System CLASSPATH. Ich habe sogar überprüft, es ist mehrmals über printenv in der Konsole. Verlasse ich einen Schritt?Java ClassNotFoundException für org.h2.Driver

CODE:

import java.sql.*; 

public class Program { 

/** 
    * @param args 
    */ 
public static void main(String[] args) 
    throws Exception{ 

    try{ 
    System.out.println("hello, world!"); 
    Class.forName("org.h2.Driver"); 
    Connection conn = DriverManager.getConnection("jdbc:h2:~/testdb", "sa", ""); 
    // add application code here 
    conn.close(); 
    }catch(ClassNotFoundException ex){ 
    System.out.println("ERROR: Class not found: " + ex.getMessage()); 

    } 
    System.exit(0); 

} 

} 
+0

Wie haben Sie die Jar zu Ihrem Classpath hinzu? Um sicher zu sein, würde ich einen Ordner in Ihrem Projekt namens 'lib' erstellen, kopieren Sie das jar hinein, klicken Sie dann mit der rechten Maustaste und wählen Sie 'Build path> Add to build path'. – William

+0

Könnten Sie bitte Ihren Code richtig formatieren - wählen Sie den Code und verwenden Sie die 5. Schaltfläche (Codebeispiel) auf der Bearbeitungsleiste im Bearbeitungsmodus. –

+0

Wie laufen Sie Ihren Code? In Eclipse oder von der Kommandozeile? Wie hast du h2.jar im Klassenpfad hinzugefügt? Wie haben Sie die Existenz von h2.jar im Klassenpfad überprüft? –

Antwort

6

die Stichprobe (unten) wirft ein ClassNotFoundException

Dann wird der Fahrer nicht auf dem classpath ist.

Die Sache ist, ich habe die h2 jar Datei zum System CLASSPATH hinzugefügt. Ich habe sogar überprüft, dass es dort mehrmals über "Printenv" in der Konsole ist.

Wie haben Sie das genau gemacht? Bitte zeigen Sie die erhaltene Ausgabe an.

Mache ich einen Schritt aus?

Ich kann nicht mit den bereitgestellten Informationen sagen. Aber auf die Umgebungsvariable CLASSPATH angewiesen zu sein, ist ohnehin eine schlechte Übung, und Sie sollten die Option -cp verwenden, wenn Sie Java in der Befehlszeile ausführen. Wie folgt aus:

java -cp h2.jar com.acme.Program 

Gibt es eine Möglichkeit, ich Eclipse-Set können die JAR-Datei verwenden, wenn ich das RUN-Menü verwenden, so dass ich habe nicht von der Konsole laufen die ganze Zeit?

Ja. Fügen Sie unter Eclipse die JAR dem Projektbuildpfad hinzu: Klicken Sie mit der rechten Maustaste auf in Ihrem Projekt und dann auf Eigenschaften> Java-Buildpfad> Bibliotheken> JARS hinzufügen ... (vorausgesetzt, das H2 JAR ist in einem Verzeichnis relativ zu Ihrem Projekt verfügbar)). Andere IDE haben eine gleichwertige Möglichkeit, dies zu tun.

+0

Danke. Ich wusste nicht, CLASSPATH war schlechte Politik. Gibt es eine Möglichkeit, Eclipse die Verwendung der JAR-Datei zu ermöglichen, wenn ich das RUN-Menü verwende, so dass ich nicht ständig von der Konsole aus arbeiten muss? –

25

In meinem Fall (unabhängig ein wenig, aber erwähnenswert), habe ich das meinen Maven pom, und die Fehlermeldung ging:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>xxx</version> <!-- ex: 1.2.140 --> 
    </dependency> 

oder wenn Sie nur h2 während Geräts verwenden Test:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>xxx</version> <!-- ex: 1.2.140 --> 
    <scope>test</scope> 
    </dependency> 
+1

Möchte hinzufügen ' test' da ist, wie es wahrscheinlich am häufigsten verwendet wird. Die neueste Version ist hier verfügbar: http://www.h2database.com/html/main.html – GlenPeterson

4

Kürzlich traf ich die java.lang.ClassNotFoundException: org.h2.Driver Ausnahme in IntelliJ IDEA 2.017,2 EAP, während die neueste Version mit (1.4.196) von H2-Treiber. Die Lösung bestand darin, auf 1.4.195 herabzustufen, was funktionierte.

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>1.4.195</version> 
    <scope>test</scope> 
</dependency> 
1

Die <scope>[database_name]</scope> sollte die Datenbank enthalten, mit der Sie arbeiten. Wenn Sie Ihre Datenbank von einer auf eine andere ändern, müssen Sie auch den Bereich ändern. Sobald ich es änderte, ging der Fehler weg.

1

In meinem Fall (ich benutze sbt) Änderung

libraryDependencies += "com.h2database" % "h2" % "1.4.196" % Test 

zu

libraryDependencies += "com.h2database" % "h2" % "1.4.196"