it-swarm.com.de

Kein passender Treiber gefunden (SQLite)

Ich hoffe jemand kann mir helfen. Ich arbeite an einer einfachen Anwendung, die eine Verbindung zu einer SQLite-Datenbank herstellt. Folgendes ist mein Verbindungscode:

try {           
  Connection con = DriverManager.getConnection("jdbc:sqlite:myDB.sqlite");
  PreparedStatement pstm = con.prepareStatement("insert into hell(username,pssword) " +
"values ('"+tfUname.getText()+"','"+tfUpass.getText()+"')");

  pstm.close();
  con.close();
  JOptionPane.showMessageDialog(null,"Congrats, you have been registered succesfully");
  RegisterWindow rw = new RegisterWindow();
  rw.setVisible(false);
  pack();
  dispose();
} catch(SQLException ex) {
  setTitle(ex.toString());
}

Dies ist nur ein Fenster, um einen Benutzernamen und ein Kennwort in die Datenbank zu laden. Das Problem, das ich habe, ist, dass beim Klicken auf die Schaltfläche die folgende Ausnahme angezeigt wird:

"Java.sql.SQLException: No suitable driver found for jdbc:sqlite:C\\LoginJava2\\myDB.sqlite" 

(Ich habe ein Beispiel zum Herstellen einer Verbindung zu einer SQLite-Datenbank in Java gefunden. Das Beispiel, das ich gefunden habe, funktioniert gut.)

Dieses Programm mache ich in Window Builder (Eclipse). Ich verwende denselben Treiber, den ich in dem gefundenen Beispiel verwende. Ich weiß nicht, ob ich einen anderen Treiber verwenden muss. Ich habe es zwar mit verschiedenen Treibern versucht, aber diese Meldung erscheint immer noch.

16
Fenrir86

In Ihrem Klassenpfad fehlen die JAR (s), die die sqlite-Klassen und den Treiber enthalten. Sie benötigen so etwas wie sqlite-jdbc-3.7.2.jar oder Ihre entsprechende Version. 

Wenn Sie sich sicher sind, dass die JAR-Datei vorhanden ist, fügen Sie diese Codezeile hinzu, bevor Sie eine Verbindung erstellen:

Class.forName("org.sqlite.JDBC");
26
JamesB

Ich habe das gleiche Problem. Ich habe Maven benutzt und Abhängigkeit hinzugefügt:

    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.15.1
        </version>
    </dependency>

Es konnte kompiliert werden und ich bekam:

Es wurde kein passender Treiber für jdbc: sqlite: xx.db gefunden

Ich überprüfte den Klassenpfad und ich war sicher, dass sqlite-jdbc-3.15.1.jar dort war. Ich denke, dass die Klasse aus irgendeinem Grund nicht geladen wurde, ich weiß nicht warum. also fügte ich hinzu 

Class.forName ("org.sqlite.JDBC");

am Anfang meines Codes. Es funktionierte!

Und ich lösche die Zeile darüber. Es funktioniert noch! Ich habe das Projekt gesäubert und neu aufgebaut, es ist kein Class.forName () mehr nötig !!! Ich weiß immer noch nicht warum. Aber das Problem ist gelöst. Ich denke, Class.forName () kann für die Diagnose verwendet werden, wenn sich die von Ihnen benötigte Klasse im Klassenpfad befindet.

4
Lucas Liu

Es gibt etwas mehr als nur Class.forName.

In dem Fall, in dem Sie beide Schritte ausgeführt haben: - Die JL-Bibliothek sqlite wurde dem lib-Ordner unter Ihrem Projekt hinzugefügt. Verweisen Sie darauf im Erstellungspfad des Projekts. sqlite.JDBC ") - Anweisung. Und die Fehlermeldung" No suit driver "wird weiterhin angezeigt. Dies kann durch den Datenbankpfad verursacht werden. Wenn Sie Windows verwenden: Anstelle von :

DriverManager.getConnection("D:\\db\\my-db.sqlite").

Du solltest benutzen:

DriverManager.getConnection("jdbc:sqlite:D:\\db\\my-db.sqlite").

Der "jdbc: sqlite:" macht den Trick.

Wenn Sie Linux verwenden, ändern Sie einfach das Trennzeichen: DriverManager.getConnection ("jdbc: sqlite: /your/somepath/my-db.sqlite").

3
Andiana

Die Zeile "Class.forName (" org.sqlite.JDBC ");" funktioniert, da eine Instanz von JDBC erstellt wird, die den statischen Block der Klasse JDBC auslöst:

 static {
        try {
            DriverManager.registerDriver(new JDBC());
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

Anstatt das oben erwähnte Class.forname () hinzuzufügen, sollten Sie direkt diese Zeile verwenden, die dieselbe Wirkung hat und eleganter ist (da Sie nicht umsonst eine Instanz von JDBC erstellen):

DriverManager.registerDriver(new JDBC());
2
Eehol

Wenn Sie Maven verwenden und eine ausführbare Dose erstellen möchten, können Sie den Inhalt der sqlite-Dose in Ihre selbst erstellte Dose importieren: 

<plugins>
  <!-- any other plugins -->
  <plugin>
    <artifactId>maven-Assembly-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
          <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
          <addClasspath>true</addClasspath>
          <mainClass>MyPackage.Main</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin>
</plugins>

Sie müssen keinen spezifischen Klassenpfad oder eine implizite Verwendung hinzufügen, wie in den anderen Antworten vorgeschlagen.

0
Piervit

Ich hatte ähnliche Probleme mit einer einfachen Konfiguration wie folgt 

apply plugin: 'Java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.Apache.commons', name: 'commons-lang3', version: '3.0'

    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'

    compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.23.1'

}

jar {
    manifest {
        attributes 'Main-Class': 'rewards.simulator.MainSimulator'

    }
}

Später stellte ich fest, dass Gradle Build ein Gefäß bildete, das keine externen Abhängigkeiten enthielt. Die folgende Konfiguration soll verwendet werden, um alle abhängigen Bibliotheken zusammen mit den Quelldateien in die resultierende JAR-Datei aufzunehmen, um ein Fat-Jar zu erstellen:

apply plugin: 'Java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.Apache.commons', name: 'commons-lang3', version: '3.0'

    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'

    compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.23.1'

}

jar {
    manifest {
        attributes 'Main-Class': 'rewards.simulator.MainSimulator'

    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}