Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从centos连接到Oracle DB_Java_Oracle_Centos_Ojdbc - Fatal编程技术网

Java 无法从centos连接到Oracle DB

Java 无法从centos连接到Oracle DB,java,oracle,centos,ojdbc,Java,Oracle,Centos,Ojdbc,我有一个连接到oracle数据库的java代码。 它在windows电脑和Mac电脑上运行良好。但是当我试图从openstack机器(运行在centos上)运行代码时,我得到了错误。通过调试,我发现机器甚至没有连接到数据库 这是密码 public static void main(String[] args){ System.out.println("Connection requested"); String selectStatement = "SELECT

我有一个连接到oracle数据库的java代码。 它在windows电脑和Mac电脑上运行良好。但是当我试图从openstack机器(运行在centos上)运行代码时,我得到了错误。通过调试,我发现机器甚至没有连接到数据库

这是密码

public static void main(String[] args){
        System.out.println("Connection requested");
        String selectStatement = "SELECT * FROM TABLE_NAME";
        Connection connection = getConnection("username","password");
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(selectStatement);
            ResultSet result = preparedStatement.executeQuery();
            System.out.println("Connection successful");
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection(String username, String password) {
        Connection connection = null;
        try {
            Class.forName("classname");
            connection = DriverManager.getConnection("url",username, password);
        } catch (ClassNotFoundException e) {
            System.out.println("Connection error\n" + e);
        } catch (SQLException e) {
            System.out.println("Connection error\n" + e);
        }
        System.out.println("Connection acquired");

        return connection;
    }


Exception in thread "main" java.lang.NoClassDefFoundError: oracle/net/ns/Message
    at oracle.net.ns.NSProtocol.disconnect(NSProtocol.java:470)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:515)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:595)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at com.dal.OracleDBConnection.getConnection(OracleDBConnection.java:289)
    at com.data.format.FeedFormatter.getHistory(FeedFormatter.java:167)
    at com.data.FeedGenerator.generateJson(FeedGenerator.java:143)
    at com.data.FeedGenerator.main(FeedGenerator.java:55)
Caused by: java.lang.ClassNotFoundException: oracle.net.ns.Message
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
publicstaticvoidmain(字符串[]args){
System.out.println(“请求连接”);
String selectStatement=“从表中选择*_NAME”;
连接=获取连接(“用户名”、“密码”);
试一试{
PreparedStatement PreparedStatement=connection.prepareStatement(selectStatement);
ResultSet result=preparedStatement.executeQuery();
System.out.println(“连接成功”);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
公共静态连接getConnection(字符串用户名、字符串密码){
连接=空;
试一试{
类别名称(“类别名称”);
connection=DriverManager.getConnection(“url”、用户名、密码);
}catch(classnotfounde异常){
System.out.println(“连接错误\n”+e);
}捕获(SQLE异常){
System.out.println(“连接错误\n”+e);
}
System.out.println(“获得连接”);
回路连接;
}
线程“main”java.lang.NoClassDefFoundError中出现异常:oracle/net/ns/Message
位于oracle.net.ns.NSProtocol.disconnect(NSProtocol.java:470)
位于oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:515)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:595)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:221)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:247)
在com.dal.OracleDBConnection.getConnection(OracleDBConnection.java:289)
位于com.data.format.FeedFormatter.getHistory(FeedFormatter.java:167)
位于com.data.FeedGenerator.generateJson(FeedGenerator.java:143)
位于com.data.FeedGenerator.main(FeedGenerator.java:55)
原因:java.lang.ClassNotFoundException:oracle.net.ns.Message
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我已经将代码导出为可运行的jar。因此,jdbc驱动程序应该是可用的。我错过了什么


编辑:正如评论中所建议的,我已经查看了我创建的jar,我可以看到
Message.class
存在。这个jar在OSX中运行良好,但在CentOS中根本无法连接。我可以看到
请求的连接
,几分钟后什么也看不到。

我已经将代码导出为可运行的jar。因此,jdbc驱动程序应该是可用的。这完全取决于您是如何做到这一点的,jar的Manifest文件包含什么,jar位于何处,以及如何执行jar。您发布的异常看起来根本不像是连接问题。这看起来很像一个类路径问题,“jdbc驱动程序应该是可用的”,但显然不是。为了确保您的jar构建正确,请使用您喜爱的解压实用程序打开它,并检查它是否包含
oracle/net/ns
目录下的文件
Message.class
。如果不是,您的jar不包含您的jdbc驱动程序。@JB Nizet我在mac上以jar的形式运行了该文件,并且它可以正常工作。我已经保存了项目本身的所有库,并提供了使用jar导出依赖项的选项。@StephaneM是的,它确实包含class@JBNizet我在同一个jar中还有其他依赖项,比如apachepoi。在导出为jar并在centos中运行之后,它们不会抛出任何错误。因此,我想知道我是否需要比ojdbc更重要的东西来完成这项工作。我需要在机器上安装一些东西吗?