为啥 Eclipse 构建路径中需要 oracle 驱动程序?

Posted

技术标签:

【中文标题】为啥 Eclipse 构建路径中需要 oracle 驱动程序?【英文标题】:Why oracle driver is needed in Eclipse build path?为什么 Eclipse 构建路径中需要 oracle 驱动程序? 【发布时间】:2013-04-20 11:11:49 【问题描述】:

我是 JDBC 新手,刚刚在 Eclipse 中编写了我的第一个程序。我使用 Oracle 11g XE 作为数据库。我通过将 ojdbc6.jar 复制到 jdk 安装的 lib 文件夹中,将其添加到我的类路径中。这是我的代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test 

/**
 * @param args
 */

String url = "jdbc:oracle:thin:@Voldemort:1521:XE";
String username = "surender";
String password = "oracle";
Statement stmt;
String query;

public static void main(String[] args) 
    // TODO Auto-generated method stub
    new Test().work();



void work() 
    try 
        Connection conn = DriverManager.getConnection(url, username, password);
        stmt = conn.createStatement();
        query = "SELECT * FROM employees";
        ResultSet rset = stmt.executeQuery(query);
        while(rset.next()) 
            System.out.println(rset.getInt(1) + " " + rset.getString(2) + " " + rset.getString(3) + " " + rset.getString(4));
        
    
    catch(SQLException se) 
        System.out.println("Exception!!");
        se.printStackTrace();
    

现在由于某种原因,它在 Eclipse 中不起作用,当我通过命令提示符在 IDE 之外运行它时(我在 Windows 7 上)。但是当我在 Eclipse 中将 ojdbc6.jar 添加到项目构建路径时,它在 Eclipse 中运行良好,但正如预期的那样,在提示符下仍然无法正常工作。

我在网上看了一些教程,他们都提到需要将驱动程序文件添加到类路径中,但仅此而已。 (我一时兴起将ojdbc6.jar 添加到构建路径中,有点像亲吻和告诉:p)。

现在,这是为什么呢?

构建路径中需要添加哪些资源?

如果我想在 IDE 之外运行我的项目,我该怎么做?

提前谢谢!

【问题讨论】:

【参考方案1】:

经验法则 >> 每个依赖 jar 文件都需要添加到类路径中。 ie: JDBC 驱动程序或任何其他依赖的 jar。

在 Eclipse 中,您只能在将 ojdbc6.jar 添加到您的 Eclipse 项目类路径后才能运行您的项目,因为我们的经验法则是这样说的。

现在如果你想从命令行运行你的项目,同样的规则也适用。为此,您需要在运行 java 程序时指定所有依赖的 jar 文件。

即: java -classpath ojdbc6.jar . package.classname

【讨论】:

【参考方案2】:

为了能够使用 JDBC 驱动程序(或任何其他 Java 库),它需要位于类路径中。从 Eclipse 中执行应用程序时,Eclipse 构建路径用作类路径。

要在 IDE 之外运行它,您需要确保在运行它时指定类路径。这可以使用:

java -cp yourlib.jar;ojdbc6.jar name.of.your.MainClass

(假设您的lib.jar 和ojdbc6.jar 都在当前工作目录中,在Linux 上使用: 而不是;

或者如果您使用的是可执行 jar,则需要确保 ojdbc6.jar 包含在 MANIFEST.MF 条目 Class-Path 中,例如:

Class-Path: ojdbc6.jar

现在您可以将可执行 jar 运行为:

java -jar yourlib.jar

(假设所有其他的东西——比如MANIFEST.MF 中的MainClass 都设置正确)

【讨论】:

如果ojdbc6.jar在通过系统环境变量指定的类路径中,我还需要在命令提示符下指定我的类路径吗? 我的建议:不要使用CLASSPATH 环境变量;它通常不会像您期望的那样工作(例如,它不适用于java -jar ...,也不能在Java IDE 中工作,甚至可能在您明确使用java -cp ... 时也不能(不是100% 确定)。所以不要打扰,只需明确指定使用-cp 的类路径或将其包含在MANIFEST.MF中即可

以上是关于为啥 Eclipse 构建路径中需要 oracle 驱动程序?的主要内容,如果未能解决你的问题,请参考以下文章

为啥构建 ANE 需要 Android Studio / Eclipse?

我用eclipse创建的项目有个感叹号为啥? 警告如下:

在 Eclipse 中使用 aar - 为啥第 3 方活动在构建时解决而不是运行时解决?

为啥 Eclipse 可能无法在 Ant 构建文件的运行选项中显示“Ant Build”?

eclipse Java工作空间 为啥说用有空格、中文的路径不好?

为啥每次尝试运行 Python 程序时 Eclipse 都会要求我“构建”?