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

我希望有一个人可以帮助我。 我正在开发一个与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()); } 

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

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

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

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

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

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

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

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

   org.xerial sqlite-jdbc 3.15.1   

它可以编译,我得到:

没有为jdbc找到合适的驱动程序:sqlite:xx.db

我检查了类路径,我确信sqlite-jdbc-3.15.1.jar就在那里。 我想由于某种原因,Class没有加载,我不知道为什么。 所以我补充道

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

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

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

除了Class.forName之外还有一些东西。

如果您执行以下两项操作: – 将sqlite jar库添加到项目下的lib文件夹中,在项目构建路径中引用它。 – 添加了Class.forName(“org.sqlite.JDBC”)语句。 并且仍会出现错误消息“No suit driver”,它可能是由您的数据库路径引起的。 如果您使用的是Windows:而不是:

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

你应该使用:

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

“jdbc:sqlite:”就可以了。

如果您使用的是Linux,只需更改分隔符:DriverManager.getConnection(“jdbc:sqlite:/your/somepath/my-db.sqlite”)。

行“Class.forName(”org.sqlite.JDBC“);” 因为它创建了一个JDBC实例,它触发了类JDBC的静态块:

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

您应该直接使用具有相同效果且更优雅的这一行(而不是为了什么都不创建JDBC实例),而不是添加上面提到的Class.forname():

 DriverManager.registerDriver(new JDBC()); 

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

    maven-assembly-plugin   package  single       true true true MyPackage.Main    jar-with-dependencies     

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

我使用简单的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) } } }