漠180 2024-04-22 18:13 采纳率: 50%
浏览 26
已结题

ojdbc驱动加载成功,无法连接oracle数据库Exception in thread "main" java.lang.ExceptionInInitializerError

驱动加载成功,无法连接数据库,
MyEclipse中代码:

import java.sql.*;
public class JdbcTest  {
    public static void main(String[] args) {
        try {
            // 加载Oracle JDBC驱动程序  
            Class.forName("oracle.jdbc.driver.OracleDriver");  
            System.out.println("获取驱动成功");  
            
            Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:TEST","sys as sysdba","Hsc2000!");
            System.out.println("连接到数据库成功");  
            //使用JDBC调用连接到一个特定的数据库服务器
            
            if (conn != null) {  
                conn.close();  
            }  
        } catch (ClassNotFoundException e) {  
            System.out.println("无法加载Oracle JDBC驱动程序,请检查ojdbc驱动是否已正确安装到类路径中");  
            e.printStackTrace();  
        } catch (SQLException e) {  
            System.out.println("连接数据库时发生错误");  
            e.printStackTrace();  
        }  
            
}
}

错误:

获取驱动成功
Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at oracle.jdbc.driver.PhysicalConnection.<clinit>(PhysicalConnection.java:6963)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:62)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:825)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:651)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at JdbcTest.main(JdbcTest.java:9)
Caused by: javax.json.JsonException: Provider org.glassfish.json.JsonProviderImpl not found
    at javax.json.spi.JsonProvider.provider(JsonProvider.java:99)
    at javax.json.Json.createObjectBuilder(Json.java:299)
    at javax.json.JsonValue.<clinit>(JsonValue.java:61)
    ... 9 more
Caused by: java.lang.ClassNotFoundException: org.glassfish.json.JsonProviderImpl
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at javax.json.spi.JsonProvider.provider(JsonProvider.java:96)
    ... 11 more

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-04-22 18:13
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    问题概括

    这个问题的目的是要解决在使用Java连接Oracle数据库时遇到的java.lang.ExceptionInInitializerError异常,导致无法成功建立数据库连接。

    问题出现原因

    根据提供的错误信息,问题出现在尝试加载Oracle JDBC驱动程序并建立数据库连接时。异常的根本原因是javax.json.JsonException,具体是因为找不到org.glassfish.json.JsonProviderImpl类。这表明可能是由于缺少了Java JSON处理库的依赖,或者是项目中存在版本冲突。

    问题解决方案

    最优的解决方案是确保项目中正确引入了Java JSON处理库的依赖,并且没有版本冲突。Oracle JDBC驱动可能依赖于Java JSON API,如果项目中没有相应的实现,就会出现这个错误。

    提供示例

    如果项目使用的是Java 8或更早版本,需要添加Java JSON处理库的依赖。以下是使用Maven添加依赖的示例:

    <!-- 在pom.xml文件中添加 -->
    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.1.4</version>
    </dependency>
    

    如果使用的是Java 9或更高版本,JSON API已经包含在JDK中,不需要额外添加依赖。

    示例代码运行方式

    1. 确保你的开发环境是Java,并且安装了Maven(如果是使用Maven管理依赖)。
    2. 将上述依赖添加到项目的pom.xml文件中。
    3. 运行Maven以更新项目依赖。
    4. 运行你的Java程序。

    示例代码预期运行结果

    如果依赖添加正确,并且没有其他错误,预期的运行结果是能够成功加载Oracle JDBC驱动程序并建立数据库连接,不会出现java.lang.ExceptionInInitializerError异常。

    获取驱动成功
    连接到数据库成功
    

    请注意,上述代码运行结果只是示例,实际的输出可能会根据你的数据库配置和环境有所不同。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 修改了问题 4月22日
  • 创建了问题 4月22日