gpt4 book ai didi

java - 如何解决这个 java.lang.ClassCastException : org. apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource?

转载 作者:搜寻专家 更新时间:2023-11-01 01:01:37 25 4
gpt4 key购买 nike

我正在尝试使用池在 tomcat 中进行数据库连接,这就是我的上下文:

<Resource name="jdbc/slingemp" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/slingemp"/>

这就是我的 web.xml :

<description>MySQL JNDI Test</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/slingemp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

这就是我连接数据库的方式:

 package org.slingemp.jnditest;

import java.io.IOException;
import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
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 org.apache.tomcat.jdbc.pool.DataSource;

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

/**
* @see HttpServlet#HttpServlet()
*/
public JNDILookUpServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/slingemp");
Connection conn = ds.getConnection();
if(conn != null)System.out.println("Connected..");
else System.out.println("Not connected...");
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("index.jsp");
}


}

但它给了我以下异常:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource

请帮我解决这个问题,

问候

最佳答案

您只是使用了错误的导入。

替换这个:

import org.apache.tomcat.jdbc.pool.DataSource;

用这个:

import javax.sql.DataSource;

javax.sql.DataSource 是所有DataSource 实现必须继承的基础接口(interface)。通常不建议针对此接口(interface)以外的任何其他内容进行开发。

关于java - 如何解决这个 java.lang.ClassCastException : org. apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10926659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com