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

时间:2013-04-20 11:11:49

标签: java eclipse oracle jdbc buildpath

我是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之外运行我的项目,我该怎么做?

提前Thanx!

2 个答案:

答案 0 :(得分:2)

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

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

现在,如果要从命令行运行项目,则应用相同的规则。为此,您需要在运行Java程序时指定所有相关的jar文件。

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

答案 1 :(得分:0)

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

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

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

(这假设yourlib.jar和ojdbc6.jar都在当前工作目录中,在linux上使用:而不是;

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

Class-Path: ojdbc6.jar

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

java -jar yourlib.jar

(假设所有其他内容 - 例如MainClass中的MANIFEST.MF设置正确)