如您所見,此代碼是我的數據訪問對象層的一部分。 我之前從未使用過ConnectionPool對象,因爲我仍在學習Java。 無論如何,我得到一條錯誤消息指出:JSP/DAO錯誤:方法getInstance()未定義類型ConnectionPool
的方法的getInstance()是未定義的類型連接池。 (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);
}
}
我剛剛發現我犯了一個錯誤: - 我的,上面提到的,是不應該類中的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();
}
}
}
希望有更多經驗的人對此有評論,但我不確定您希望如何在您的代碼中創建連接池。連接池有一個構造函數來創建一個池,但是這將創建一個新的池實例,並且連接池背後的想法是爲應用程序共享一個池。 –