java 无法连接到数据库(找不到合适的驱动程序)

r1zk6ea1  于 2023-05-05  发布在  Java
关注(0)|答案(7)|浏览(314)

我的连接代码:

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());
}

这只是一个将用户名和密码插入数据库的窗口。单击按钮时,出现以下异常:

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

我发现了一个如何在Java中连接到SQLite数据库的例子,它运行得很好。我在WindowBuilder(Eclipse)中使用与示例中相同的驱动程序来完成此操作。我尝试了不同的驱动程序,但该消息仍然出现。

csga3l58

csga3l581#

您的类路径缺少包含sqlite类和驱动程序的jar。您需要类似sqlite-jdbc-3.7.2.jar或您的适用版本。
如果你确定jar文件已经存在,在创建连接之前,尝试添加这行代码:

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

hwamh0ep2#

我也有同样的问题。我使用了maven并添加了依赖项:

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

它可以被编译,我得到:
未找到适用于jdbc:sqlite:xx.db的驱动程序
我检查了类路径,我确信sqlite-jdbc-3.15.1.jar在那里。我猜由于某种原因,类没有加载,我不知道为什么。所以我加了一句
System. out. println(“println”);
在代码的开头。成功了!
然后,我删除上面的行。它还能用!我清理了项目并重新构建了它,不再需要Class.forName()了!我还是不知道为什么但问题解决了。我认为Class.forName()可以用来诊断你需要的类是否在类路径中。

hjzp0vay

hjzp0vay3#

同时检查数据库连接字符串是否引用了现有数据库。
如果您:

  • 将sqlite jar库添加到项目下的lib文件夹中,在项目构建路径中引用它。
  • 添加了Class.forName(“org.sqlite.JDBC”)语句。

如果仍然出现“No suit driver”错误消息,则很可能是由于您的数据库路径不正确导致的。检查路径是否存在。
引用现有数据库文件的格式正确的连接字符串:
windows

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

Linux

DriverManager.getConnection("jdbc:sqlite:/your/somepath/my-db.sqlite").
xv8emn3q

xv8emn3q4#

如果你使用Maven并想构建一个可执行的jar,你可以决定将sqlite jar的内容导入到你自己生成的jar中:

<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>

您不必像其他答案中建议的那样添加特定的类路径或隐式用法。

wn9m85ua

wn9m85ua5#

下面是中央存储库的链接,您可以从中下载最新的驱动程序文件。
https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/
确保下载的是sqlite-jdbc-version.jar文件,而不是其他文件。希望这个能帮上忙

dluptydi

dluptydi6#

我在使用简单的Gradle配置时也遇到了类似的问题,如下所示

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'

    }
}

我后来发现Gradle build正在创建一个不包含任何外部依赖项的jar。下面的配置将用于在生成的jar文件中包含所有依赖库,沿着源文件,以创建一个fat-jar:

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) }
    }
}
5cnsuln7

5cnsuln77#

版本3.7.2的问题尝试安装3.21.0吧

相关问题