2010-11-11 25 views
0

我在我的Linux机器上安装了Mysql并编写了一个示例程序来访问它的一个表。 我正在使用'mysql-connector-java-5.1.10.jar'在Linux上访问Mysql时出现CLASSPATH问题

如果我把jar放在'jre/lib/ext'中,代码工作正常。但是,识别该jar的其他方法不起作用。我试着设置$ CLASSPATH并尝试使用'。'。当前目录。

它与下面的错误而失败:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306 
     at java.sql.DriverManager.getConnection(DriverManager.java:602) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
+0

'但是,识别该jar的其他方法不起作用。我试着设置$ CLASSPATH并尝试使用'。'。当前目录.'请详细说明这个 – 2010-11-11 07:20:39

+0

一种方法是设置CLASSPATH的权利?我刚开始知道,当我在linux中设置CLASSPATH时,我必须在CLASSPATH中放置.class文件的路径。 Windows中并非如此。 Windows可以识别当前目录中的.class文件以及CLASSPATH。第二种方法是在不设置CLASSPATH的情况下使用当前目录。但是,根据下面的答案,它也不起作用。我必须使用-cp – ernesto 2010-11-11 07:36:03

回答

0

我通常不使用全局$CLASSPATH变量,让它运行的最简单的方法是

java -cp .;/path/to/mysql-connector-java-5.1.10.jar[;<other libs>] pkg.name.MyApplication 

旁注

如果您将应用程序导出到具有Main-Class属性的jar(“可执行jar” )并以java -jar myjar.jar开头,那么你必须要将所有需要的库添加到罐子清单中,$CLASSPATH-cp在这种情况下被忽略。这就是为什么我通常不使用-jar选项...

编辑

要回答你的另一个问题:如果当前目录被默认从那里添加到类路径,那么位置应用程序开始可能会影响应用程序本身。

想象一下,一个罐子内的应用程序和启动命令

java -cp application.jar com.example.Main 

现在我们有一个定义的环境:只有application.jar的内容(和JRE类)都在应用程序的classpath和部分。如果当前目录自动添加到类路径中,则当前位置(以及所有子文件夹的位置)上的所有文件都将位于类路径中,不管是否打算。结果,如果从用户主目录启动应用程序,但如果从根目录启动(/),则应用程序可能不会启动。

+0

cool明确提及它们。得到它了!也有一些问题....为什么我们应该明确地设置为查看当前目录(包括.class文件和jar)。 – ernesto 2010-11-11 07:30:57

+0

http://download.oracle.com/javase/tutorial/essential/environment/paths.html – ernesto 2010-11-11 07:31:52

+0

为什么它无法将当前目录识别为每个文档的默认位置。 – ernesto 2010-11-11 07:46:44