找不到合适的驱动程序(SQLite)

Fen*_*r86 20 java eclipse sqlite windowbuilder

我希望有一个人可以帮助我.我正在开发一个与SQLite数据库连接的简单应用程序.以下是我的连接代码:

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());
}
Run Code Online (Sandbox Code Playgroud)

这只是一个在数据库中加载用户名和密码的窗口.我遇到的问题是当我点击按钮时出现以下异常:

"java.sql.SQLException: No suitable driver found for jdbc:sqlite:C\\LoginJava2\\myDB.sqlite" 
Run Code Online (Sandbox Code Playgroud)

(我找到了一个关于如何用Java连接到SQLite数据库的例子,我发现这个例子效果很好)

这个程序我在窗口构建器(eclipse)中这样做.我使用的是我在我找到的示例中使用的相同驱动程序.我不知道是否必须使用其他驱动程序.事实上,我尝试过不同的驱动程序,但仍然会显示该消息.

Jam*_*esB 32

您的类路径缺少包含sqlite类和驱动程序的jar.你需要像sqlite-jdbc-3.7.2.jar或你的适用版本.

如果您确定jar在那里,请尝试在创建连接之前添加以下代码:

Class.forName("org.sqlite.JDBC");
Run Code Online (Sandbox Code Playgroud)

  • 它不适用于sqlite-jdbc-3.7.2.jar ...如果我添加"Class.forName("org.sqlite.JDBC")行;" 使用此消息在该行中出现错误:"未处理的异常类型ClassNotFoundException" (3认同)

Luc*_*Liu 6

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

    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.15.1
        </version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

它可以被编译,我得到:

找不到适用于jdbc:sqlite:xx.db的驱动程序

我检查了类路径,并确定sqlite-jdbc-3.15.1.jar在那里。我猜出于某种原因,该类未加载,我不知道为什么。所以我加了

Class.forName(“ org.sqlite.JDBC”);

在我的代码的开头。有效!

并且,我删除上面的行。它仍然有效!我清理了项目并重新生成它,不再需要Class.forName()!!!我还是不知道为什么。但是问题解决了。我认为Class.forName()可用于诊断您所需的类是否在类路径中。


And*_*ana 6

另请检查您的数据库连接字符串是否引用了现有数据库。

在这种情况下,您:

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

如果仍然出现“Nosuit driver”错误消息,则很可能是由于您的数据库路径不正确造成的。检查路径是否存在。

引用现有数据库文件的格式正确的连接字符串:

视窗

DriverManager.getConnection("jdbc:sqlite:D:\\db\\my-db.sqlite").
Run Code Online (Sandbox Code Playgroud)

Linux

DriverManager.getConnection("jdbc:sqlite:/your/somepath/my-db.sqlite").
Run Code Online (Sandbox Code Playgroud)