当前位置: 首页 > 知识库问答 >
问题:

无法使用Oracle创建类错误的JDBC驱动程序,并使用@ResourcesJava

华良平
2023-03-14

复习我的Java技能,伙计们。我曾经在类内用Java声明我的连接细节。这次我决定尝试使用context和@Resource方法,但出现了一些错误

信息:服务器在1701毫秒内启动ervlet.java:725SQLException:无法为hain.java:2912的连接URL'jdbc: oracle:瘦@hain.internal'创建类'org.apache.catalina.core.OracleDriver'的JDBC驱动程序。BasicDataSorg.apache.catalina.core.ConnectionFactory(BasicDataShain.do)在hain.java:2062。BasicDataSorg.apache.tomcat.websocket.server.DataSource(BasicDataSilter.do)在ilter.java:522。BasicDataSorg.apache.catalina.core.连接(BasicDataShain.internal)在hain.java:239FirstServlet.do获取(FirstServlet.java:40)在javax.servlet.http.HttpServlet.service(HttpServlet.java:618)在javax.servlet.http.HttpServlet.service(HttpSjava.sql.)在oracle.jdbc.driver.Application FilterC//10.30.30.30:1521/mydatabase?useSSL=falseDoFilter(Application ationFilterCorg.apache.tomcat.dbcp.dbcp)在ource.createApplication FilterCource.java:2065Filter(Application ationFilterCorg.apache.tomcat.dbcp.dbcp)在ource.createWsFource.java:1939Filter(WsForg.apache.tomcat.dbcp.dbcp)在ource.getApplication FilterCource.java:1412DoFilter(Application ationFilterCcom.pldt.itms.)在org. apache. catalina. coreCoyoteAdapter. service(CoyoteAdapter. java: 537)在org. apache. coyot. http11。在org. apache. tomcat. util. net的AbstractHttp11Processor. Process(AbstractHttp11Processor. java: 1085)。在org. apache. coyot. http11上的AbstractProtocol$AbstractConnectionHandler. Process(Abstract原型. java: 658)。在org. apache. tomcat. util. net上的Http11NioProtocol$Http11ConnectionHandler. Process(Http11Nio原型. java: 222)。在org. apache. tomcat. util. net上的NioEndpoint$SocketProcessor. doRun(NioEndpoint. java: 1556)。NioEndpoint$SocketProcessor. run(NioEndpoint. java: 1513)。线程

以下是我的背景。WebContent/META-INF中的xml

<?xml version="1.0"?>
<Context>

<Resource url="jdbc:oracle:thin@//10.30.30.30:1521/mydatabase?useSSL=false" driverClassName="oracle.jdbc.driver.OracleDriver" password="password" username="username" maxWait="10000" maxIdle="5" maxActive="20" type="javax.sql.DataSource" auth="Container" name="jdbc/web_my_context"/>

</Context>

这是我的Java课程

package com.company.project;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Resource(name="jdbc/web_my_context")
    DataSource dataSource;
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1 printwriter
        PrintWriter out = response.getWriter();
        response.setContentType("text/plain");
        //2 connect to db
        Connection myConn = null;
        Statement myStmt = null;
        ResultSet myRs = null;

        try{
            myConn = dataSource.getConnection();

        //3 create sql
            String sql = "select * from table_authorities";
            myStmt = myConn.createStatement();
        //4 execute sql
            myRs = myStmt.executeQuery(sql);
        //5 process resultset of sql statment

            while (myRs.next()){
                String email = myRs.getString("username");
                out.println(email);
            }

        } catch (Exception exc) {
            exc.printStackTrace();
        }
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

}

编辑:我更正了我的xml

<?xml version="1.0"?>

<Context>

<Resource url="jdbc:oracle:thin:@//10.30.30.30:1521/mydatabase?useSSL=false" driverClassName="oracle.jdbc.driver.OracleDriver" password="password" username="username" maxWait="10000" maxIdle="5" maxActive="20" type="javax.sql.DataSource" auth="Container" name="jdbc/web_my_context"/>

</Context>

但现在它仍在抛出一个错误:

原因:甲骨文。网纳什。NetException:侦听器拒绝连接,出现以下错误:ORA-12514,TNS:侦听器当前不知道oracle的连接描述符中请求的服务。网纳什。NSProtocolStream。oracle的negotiateConnection(NSProtocolStream.java:272)。网纳什。NSProtocol。在oracle连接(NSProtocol.java:263)。jdbc。驾驶员T4C连接。在oracle上连接(T4CConnection.java:1360)。jdbc。驾驶员T4C连接。登录(T4CConnection.java:486)。。。还有35个

共有1个答案

卢阳成
2023-03-14

正如其他人指出的,xml中存在语法错误,正确的语法是

jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME

我认为您只是在Oracle和MySQL之间切换时出现错别字,我建议在发布问题时不要这样做,这样我们可以准确地帮助您,为此我们需要最新的语法。

更新答案

我认为导致你出错的是这条线

'jdbc:oracle:thin@//10.30.30.30:1521/mydatabase?usesl=false'

AFAIK useSSL=false仅适用于MySQL,不适用于Oracle数据库。

尝试删除xml中的useSSL=false。你的代码现在应该是这样的

'jdbc:oracle:thin@//10.30.30.30:1521/mydatabase'

我相信默认情况下Oracle不使用SSL,您不再需要明确地说它不使用SSL。为了防止您想使用SSL for Oracle,您将不得不使用tcps协议,您可以通过使用像这样详细的TNS样式来实现这一点。

jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcps)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))

如果您对配置Oracle连接以使用SSL感兴趣,可以通过此链接查看他们的文档。

 类似资料:
  • 问题内容: 我有一种方法可以将记录插入Postgres DB中,并返回为所述记录生成的标识字段。问题是,如果我在我的POM文件中包含Redshift驱动程序,那么该驱动程序将代替Postgres驱动程序被使用- Redshift驱动程序不允许返回标识值。 代码是: 使用此POM时,它可以工作: 使用此POM时,它不起作用: 是什么让Java选择Redshift驱动程序而不是Postgres驱动程序

  • 我们有一个使用Oracle 19.3数据库运行的项目,以及一个使用Oracle 19.3 JDBC驱动程序(在Maven Central上可用)的Java应用程序。在带有JRE1.8的Windows上,一切都很好,但当我运行在构建服务器上或在带有OpenJDK11.0.3的WSL Ubuntu中时,它拒绝连接到数据库。具体地说: 如果切换到18.3JDBC驱动程序,在这两种环境中一切都很好;如果我

  • 问题内容: 我已经尝试了几乎所有可以找到的一切,如果有人能够帮助我,我将永远感激不已(在我的时间里,我有更多的空闲时间)。 基本上,我在Tomcat 7.0中有一个错误(都是在Eclipse中运行并通过startup.bat运行时),该错误表示一旦动态Web应用程序开始访问数据,就会出现此错误: 我的tomcat \ lib目录中有sqljdbc4.jar文件。我也尝试过将它放在我的WEB-INF

  • 我尝试使用TNS URL、用户名和密码连接到Oracle 11i数据库。JNDI正在成功查找数据源,但我无法获得连接。相反,我看到下面的堆栈跟踪。 我的Maven设置如下。 我的Spring MVC应用程序已经部署到Tomcat 8。我的oracle jar文件位于位置。如下所示 我的web.xml配置 我不确定我做错了什么。我能够使用DriverManager API成功连接。我看了下面的帖子,

  • 那么,为什么Oracle JDBC驱动程序创建使用ISO-8859-1字节编码的字符串呢?如何在不改变数据库(也不转换字符串)的情况下获得UTF-8字节编码的字符串?我可以从驱动程序配置ou JMV args中更改它吗?

  • 我正在尝试使用Tomcat 8服务器和Oracle 11g数据库在STS中设置Spring 4 MVC应用程序,但在设置数据源时遇到了问题。 我知道Spring设置没有问题,因为没有数据源,它可以正常工作。 下面是数据源 bean: 我的web.xml资源引用: 我的Tomcat服务器。xml资源: - 还有我的背景.xml 我得到的错误是: 错误:无法从java.sql获取JDBC连接。SQLE