我正在为 MySQL 数据库连接池编写一个类。
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/music");
}
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();
}
}
}
但是它在这里抛出一个异常: {
try
{
InitialContext ic = new InitialContext();
dataSource = (DataSource) ic.lookup("java:/comp/env/jdbc/music");
}
catch(Exception e)
{
e.printStackTrace();
}
但是我有一个名为 music 的 mysql 数据库,应该正确配置 mysql:
我不确定为什么会抛出空指针异常。
谢谢
最佳答案
我不认为这是一个很好的连接池实现。为什么?看起来游泳池是空的。它可能不是线程安全的。没有连接检查。
如果您打印或记录堆栈跟踪,它会准确告诉您哪一行有 NPE。我的猜测是 JNDI 查找失败,因此数据源为空。
为什么要写连接池类?您正在执行 JNDI 查找,这意味着您有一个正在运行的命名服务。这些通常是 Java EE 应用程序服务器的一部分,它可能内置了一个连接池。你为什么不直接使用它呢?如果没有,我会使用别人写的。它保证比您写的任何东西都写得更好。
关于java - 我的 JDBC 连接池有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379997/