MySQLで接続の失効を判断する方法


接続が停止したり、接続がタイムアウトしたりするなど、データベース接続が無効になったかどうかについては、Connectionインタフェースが提供するisClosed()メソッドを使用して判断することがよくあります.しかし,坑人的なのは,各メーカーが駆動中にこの方法の実現にあまりよくないことである.MySQLでは、データベース接続が無効になったのにisClosed()メソッドはtrueを返します.数回の苦痛を経て、多くの資料を探して、やっと正しい方法を見つけて、接続が失効したかどうかを判断しました.あまり話さないで、直接コードを貼ってください.
/**
     * To detect if the connection is closed by the server as connection is timeout.
     * @author Martin
     * @param conn
     * @return true if the connection is normal, otherwise, return false.
     */
    private boolean validate(Connection conn)
    {
        boolean isValidated = true;
        try {
            com.mysql.jdbc.Connection c = (com.mysql.jdbc.Connection)conn;
            c.ping();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            // e.printStackTrace();
            isValidated = false;
        }

        return isValidated;
    }

キーはcomを使うことです.mysql.jdbc.Connectが提供するping()メソッド.この方法により,接続が失効したか否かを正確に判断できる.