为啥 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 中使用 aar - 为啥第 3 方活动在构建时解决而不是运行时解决?
为啥 Eclipse 可能无法在 Ant 构建文件的运行选项中显示“Ant Build”?