【问题标题】:No main class found找不到主类
【发布时间】:2019-01-28 01:11:47
【问题描述】:

语言:Java

程序:连接到数据库

问题:我正在尝试按照 TutorialsPoint tutorial 连接 sqlite 数据库,但我不断收到未找到主类的错误。

实现:下面是我的代码,后面是我的终端命令和文件夹结构截图。但基本上我所有的文件都位于一个文件夹中,包括 sqlite jar 文件。

import java.sql.*;

public class Test {
 public static void main(String[] args) {

 Connection c = null;

 try{
   Class.forName("com.sqlite.JDBC");
   c = DriverManager.getConnection("jdbc:sqlite:test.db");
 } catch(Exception e) {
   System.err.println(e.getClass().getName() + ": " + e.getMessage());
   System.exit(0);
 }

 System.out.println("Opened database successfully!");
 }
}

终端命令

javac Test.java
java -classpath ".;sqlite-jdbc-3.23.1.jar" Test

【问题讨论】:

  • 我在这里阅读了 oracles 网站上的一些文档,docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html,看来我正在正确地进行编译并正确添加类路径。
  • 这是在 Linux 上吗?如果是这样,那么这是 Classpath does not work under linux 的副本(使用冒号作为分隔符)。
  • 我以为你在类路径参数中的位置之间使用冒号?
  • @rgettman 是的,我解决了这个问题,但现在它抱怨它找不到 com.sqlite.JDBC 类。我可能会删除这个问题并调查为什么找不到它。谢谢大家
  • 顺便说一句,您不再需要使用Class.forName()(除非使用一些真正的旧版驱动程序)。

标签: java sqlite mainclass


【解决方案1】:

您的问题是您明确地尝试加载类 com.sqlite.JDBC,而驱动程序类名称肯定在途中发生了变化。

JDBC Type 4 驱动程序具有added cleverness,它允许您仅指定连接 URL,并且驱动程序根据开头(即jdbc:sqlite)加载自身。无需怀疑驱动程序类的名称是什么。


与手头的问题无关的咆哮:

不幸的是,人们阅读了由非专家编写的旧教程,因此我们经常看到Class.forName()被使用,以及更严重的问题,即使用Statement而不是PreparedStatement

【讨论】:

  • 好的,谢谢。只是为了确保我把这个打到我的脑海里。你是说我试图在这里加载类...Class.forName("com.sqlite.JDBC");... 很容易出错,因为可能发生的事情是它被更改为类似的东西。 ...“com.sqlite.JDBCExample”...意味着它永远找不到它。
  • @Kapaz 完全正确。现在我checked,驱动程序类似乎被命名为org.sqlite.JDBC。所以,关闭但没有雪茄。请注意,该链接有点过时,但您会看到他们使用的是Class.forName()。在more recent 示例中,您会看到他们忽略了它。
【解决方案2】:

我的类路径选项不正确。我在 linux 上并试图这样做:

java -classpath ".;sqlite-jdbc-3.23.1.jar" Test

正确的方法是

java -classpath ".:sqlite-jdbc-3.23.1.jar" Test

冒号不是分号。不幸的是,现在它给了我和错误” ClassNotFoundException: com.sqlite.JDBC;

我会调查的。 感谢 cmets 帮助我找到错误

【讨论】:

  • 我修复了关于找不到 com.sqlite.JDBC 类的错误。 Unforutnely 我不知道为什么会这样。我删除了 Class.forName() 并且它起作用了。将研究它为什么起作用
猜你喜欢
  • 2014-04-27
  • 2013-12-18
  • 2016-09-13
  • 2015-07-15
  • 2011-03-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多