java - 我的 JDBC 连接池有什么问题?

标签 java mysql jsp jdbc

我正在为 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:

enter image description here

我不确定为什么会抛出空指针异常。

谢谢

最佳答案

我不认为这是一个很好的连接池实现。为什么?看起来游泳池是空的。它可能不是线程安全的。没有连接检查。

如果您打印或记录堆栈跟踪,它会准确告诉您哪一行有 NPE。我的猜测是 JNDI 查找失败,因此数据源为空。

为什么要写连接池类?您正在执行 JNDI 查找,这意味着您有一个正在运行的命名服务。这些通常是 Java EE 应用程序服务器的一部分,它可能内置了一个连接池。你为什么不直接使用它呢?如果没有,我会使用别人写的。它保证比您写的任何东西都写得更好。

关于java - 我的 JDBC 连接池有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379997/

相关文章:

java - 在eclipse java中从控制台屏蔽密码输入字段

java - 在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色

java - 使用 Ajax 的单个提交按钮在 JSP 中提交两个 HTML 表单

java - boolean 方法的 Junit 测试

java - 正则表达式中仅接受一行中的单个字符

mysql - 在不断更新数据库中维护排名顺序

mysql - 在联接的派生表查询中使用 LIMIT

php - 使用 foreach 循环插入 MySQL 表中的重复记录集

java - 使用显示标签 1.1.1 将数据导出到 Excel 时出错

forms - Spring MVC 表单 :checkbox not working