如您所见,此代码是我的数据访问对象层的一部分。
我以前从未使用过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);
        }
    }


我刚刚发现自己犯了一个错误:
-我上面提到的类中的ConnectionPool不应该是Tomcat导入的。它是一个JNDI类。见下文。 getInstance实际上是我的JNDI类中的方法。对不起,您的时间家伙。谢谢

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();
        }
    }
}

最佳答案

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

从应用程序外部化连接参数将带来更多好处。它们将保留在应用服务器上的配置中。

09-08 03:33