gpt4 book ai didi

java - JSP/DAO错误: The method getInstance() is undefined for the type ConnectionPool

转载 作者:行者123 更新时间:2023-12-01 23:48:52 25 4
gpt4 key购买 nike

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

The method getInstance() is undefined for the type ConnectionPool. (at line 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();
}
}
}

最佳答案

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

池化的目的是拥有一个连接池,应用程序在需要对数据库执行某些操作时可以从中检索连接。使用这种设计,代码将具有多个连接池,这违背了池化的目的。

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

关于java - JSP/DAO错误: The method getInstance() is undefined for the type ConnectionPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583333/

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