Java JSP/DAO错误:类型ConnectionPool的方法getInstance()未定义

Java JSP/DAO错误:类型ConnectionPool的方法getInstance()未定义,java,jsp,connection-pooling,dao,Java,Jsp,Connection Pooling,Dao,如您所见,此代码是我的数据访问对象层的一部分。 我以前从未使用过ConnectionPool对象,因为我还在学习Java。 无论如何,我收到一条错误消息,说明: 类型ConnectionPool的方法getInstance()未定义。 (在第5行) 如果你们中的任何人以前有过这种经历,我们将不胜感激 import java.sql.*; import java.util.*; import org.apache.tomcat.jdbc.pool.ConnectionPool; import

如您所见,此代码是我的数据访问对象层的一部分。 我以前从未使用过ConnectionPool对象,因为我还在学习Java。 无论如何,我收到一条错误消息,说明:

类型ConnectionPool的方法getInstance()未定义。 (在第5行)

如果你们中的任何人以前有过这种经历,我们将不胜感激

import java.sql.*;
import java.util.*;

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

import music.business.*;

public class ProductDB
{
    //This method returns null if a product isn't found.
    public static Product selectProduct(String productCode)
    {
        ConnectionPool pool = ConnectionPool.getInstance(); //<===<====<====<=================
        Connection connection = pool.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;

        String query = "SELECT * FROM Product " +
                "WHERE ProductCode = ?";
        try
        {
            ps = connection.prepareStatement(query);
            ps.setString(1, productCode);
            rs = ps.executeQuery();
            if (rs.next())
            {
                Product p = new Product();
                p.setCode(rs.getString("ProductCode"));
                p.setDescription(rs.getString("ProductDescription"));
                p.setPrice(rs.getDouble("ProductPrice"));
                return p;
            }
            else
            {
                return null;
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace();
            return null;
        }
        finally
        {
            DBUtil.closeResultSet(rs);
            DBUtil.closePreparedStatement(ps);
            pool.freeConnection(connection);
        }
    }

可以使用接受某些池属性的its创建
ConnectionPool
。即使这个构造函数是公开的,在应用程序中创建一个池,尤其是在每个DAO中,也可能是不可取的

池的要点是拥有一个连接池,应用程序可以在需要对数据库执行某些工作时从中检索连接。使用这种设计,代码将有多个连接池,这会破坏池的作用


通常在Tomcat中建立一个数据源,它在内部处理连接池的构建。有关Tomcat中连接池的更多信息,请参见这些内容。

A
ConnectionPool
可以使用接受一些池属性的its创建。即使这个构造函数是公开的,在应用程序中创建一个池,尤其是在每个DAO中,也可能是不可取的

池的要点是拥有一个连接池,应用程序可以在需要对数据库执行某些工作时从中检索连接。使用这种设计,代码将有多个连接池,这会破坏池的作用


通常在Tomcat中建立一个数据源,它在内部处理连接池的构建。有关Tomcat中连接池的更多信息,请参见这些内容。

如果您确实不想在Tomcat中定义连接池,请在“DBService”类中创建并共享连接池。正如达菲所说,在Tomcat中定义它可能是最好的方式

要在Tomcat中定义它,请执行以下操作:


getInstance()语法似乎完全错误。要直接创建和配置它,请参阅:

在“DBService”类中创建并共享它,如果您确实不想在Tomcat中定义它。正如达菲所说,在Tomcat中定义它可能是最好的方式

要在Tomcat中定义它,请执行以下操作:


getInstance()语法似乎完全错误。要直接创建和配置它,请参阅:

我会让Tomcat为您管理该池。它有关于如何创建JNDI数据源的说明。您应该这样做,并将其从代码中删除


它还有一个额外的好处,就是从你的应用程序中外部化连接参数。他们将生活在应用服务器的配置中。

我会让Tomcat为您管理该池。它有关于如何创建JNDI数据源的说明。您应该这样做,并将其从代码中删除


它还有一个额外的好处,就是从你的应用程序中外部化连接参数。他们将生活在应用服务器的配置中。

希望有人对此有更多的经验,但我不确定您是否希望在代码中创建这样的连接池。连接池有一个用于创建池的构造函数,但这将创建池的一个新实例,连接池背后的想法是为应用程序共享一个池。希望有人对此有更多经验,但我不确定您是否希望在代码中创建这样的连接池。连接池有一个用于创建池的构造函数,但这将创建池的新实例,连接池背后的想法是为应用程序共享一个池。感谢您的输入。我可能会尝试使用BoneCP管理我的连接池。谢谢您的输入。我可以尝试使用BoneCP管理我的连接池。
import java.sql.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;

public class ConnectionPool
{
    private static ConnectionPool pool = null;
    private static DataSource dataSource = null;

    public synchronized static ConnectionPool getInstance()
    {
        if (pool == null)
        {
            pool = new ConnectionPool();
        }
        return pool;
    }

    private ConnectionPool()
    {
        try
        {
            InitialContext ic = new InitialContext();
            dataSource = (DataSource) ic.lookup("java:/comp/env/jdbc/musicDB");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public Connection getConnection()
    {
        try
        {
            return dataSource.getConnection();
        }
        catch (SQLException sqle)
        {
            sqle.printStackTrace();
            return null;
        }
    }

    public void freeConnection(Connection c)
    {
        try
        {
            c.close();
        }
        catch (SQLException sqle)
        {
            sqle.printStackTrace();
        }
    }
}