Oracle 11g 不支持 JDK 1.7

Posted

技术标签:

【中文标题】Oracle 11g 不支持 JDK 1.7【英文标题】:Oracle 11g not supporting JDK 1.7 【发布时间】:2017-03-19 14:39:09 【问题描述】:

我正在使用 Tomcat 服务器 8

我已经在Lib中添加了Ojdbc7.jar

并使用 Oracle 11g (11.2.0.2) 版本

我的代码是:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

public class PrintForm extends HttpServlet

    public void doGet(HttpServletRequest req, HttpServletResponse res)throws IOException, ServletException
    
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();

        //Variables declaration
        String emp_name = req.getParameter("name");
        String s = "INSERT into Emp values(?,?)";

        try
            //Making connection with Oracle

            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
            DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

            //Inserting data into table
            PreparedStatement pst = con.prepareStatement(s);
            pst.setInt(1,1);
            pst.setString(2,emp_name);
            pst.executeUpdate();

            con.close();
        catch(Exception e)
            out.println(e);
               
    

这是在扔,

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:xe 

这个例外。

那么我应该使用什么驱动程序或 JDK 版本? 当前版本是 1.7

【问题讨论】:

您应该阅读 JDBC 基础教程。这将在第一课中介绍。 【参考方案1】:

您必须在Connection con = D.... 之前添加Class.forName("oracle.jdbc.driver.OracleDriver");

【讨论】:

非常感谢。忘记加了,因为和JDK 1.8一样不支持了,所以1.7忘记加了 @MagentoDeveloper 你错了,这在 Java 8 中也是一样的。问题可能是你在应用程序中部署了驱动程序,而不是在 tomcat lib 文件夹中。在这种情况下,JDBC 4 自动加载驱动程序(Java 6 中引入)将不起作用,您需要手动加载驱动程序。【参考方案2】:

您首先需要注册驱动程序

  DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

请阅读 oracle 驱动程序的 javadocs。它解释了这一点以及如何在不同的场景中获得连接:https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html

此外,如果您在线搜索错误 No suitable driver found for,您会发现很多网站都在解释如何在这种情况(和其他情况下)解决此问题。

【讨论】:

我已经按照你的建议做了一些修改,但是同样的例外,我正在上传完整的代码,你可以检查一下。【参考方案3】:

您应该在创建连接之前先加载驱动程序:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
                 "system", "oracle");

你可以在这里找到一个很好的教程:Connect to Oracle DB via JDBC driver

【讨论】:

【参考方案4】:

根据Oracle JDBC FAQ

如果您将 Oracle 11.2 或 11gR2 与 Java 8、7 或 6 结合使用,则应使用 ojdbc6.jar。 (需要注意的是,JDK7 和 JDK8 仅在 11.2.0.3 和 11.2.0.4 中受支持。) 如果您将 Oracle 11.2 或 11gR2 与 Java 5 一起使用,则应使用 ojdbc5.jar。 如果您在 Java 7 和 8 中使用 Oracle 12.1 或 12cR1,那么您应该使用 ojdbc7.jar 如果您在 Java 6 中使用 Oracle 12.1 或 12cR1,那么您应该使用 ojdbc6.jar 如果您将 Oracle 12.2 或 12cR2 与 Java 8 一起使用,则应使用 ojdbc8.jar。 如果您将 Oracle 18.3 与 Java 8 到 11 结合使用,则应使用 ojdbc8.jar。

以下内容已从常见问题解答中删除,因为除“持续支持”计划外,不再支持 Oracle 11.1 及更早版本:

如果您将 Oracle 11gR1 与 Java 6 一起使用,则应使用 ojdbc6.jar。 如果您将 Oracle 11gR1 与 Java 5 结合使用,则应使用 ojdbc5.jar。

您使用的是 11gR2,因此您需要 ojdbc6.jar,但请注意有关支持 Java 7 和 Java 8 的 Oracle DB 版本。

还建议使用与您的 Oracle DB 版本兼容的最新 Java 版本;即 Java 8。(Java 7 和更早的版本已经过了它们的“生命周期”......除非您有 Oracle Java 支持合同。)

【讨论】:

以上是关于Oracle 11g 不支持 JDK 1.7的主要内容,如果未能解决你的问题,请参考以下文章

如何解决从 oracle 11g jdbc 7/14 jdk 1.7 中的读取调用中得到减一?

JDK 1.6/1.7不支持TLS 1.2

行转列UNPIVOT列转行PIVOT,注意是Oracle 11g及以后才支持

Oracle 11g 中对 JSON 的支持

oracle 11g分区表最多支持多少分区

ORACLE11G报错汇总