Glassfish下的Java数据库连接

Glassfish下的Java数据库连接,java,oracle,glassfish,sqlexception,Java,Oracle,Glassfish,Sqlexception,我需要检查数据库连接是否关闭,然后发送电子邮件。代码如下: public static void main(String[] args) { try { Connection connection = DriverManager.getConnection("url", "username", "password"); Statement statement = connection.createStatement(); Resul

我需要检查数据库连接是否关闭,然后发送电子邮件。代码如下:

public static void main(String[] args) {
     try {
         Connection connection = DriverManager.getConnection("url", "username", "password");
         Statement statement = connection.createStatement();
         ResultSet resultSet = statement.executeQuery("SELECT * FROM Table");
    }
    catch(SQLException e) {
        if(e.getMessage().contains(new String("ORA-12543"))) {
           // send email
        }
    }
}
我使用此网站确定Oracle数据库何时关闭:

现在,我想在Glassfish中设置JDBC资源和JDBC连接池,并从那里使用连接。我从来没有用过玻璃鱼。我似乎找不到我要找的东西。一旦我在Glassfish中设置了资源和连接池,我想知道根据上面的代码,数据库是否已关闭,该代码是否仍然有效,或者是否会有任何更改。我想知道数据库何时关闭,然后发送电子邮件


请注意,上面的代码是示例代码,但在我的主代码中存在此代码。

IMHO,一旦使用通过JNDI数据源检索的连接,您将需要使用以下代码。(发现:) 下面我还提供了有关如何检索JNDI数据源的详细信息

■3113:“通信通道上的文件结束”

■3114:“未连接到ORACLE”

■1033:“ORACLE正在初始化或关闭”

■1034:“ORACLE不可用”

■1089:“正在进行立即停机-不允许进行任何操作”

■1090:“正在关机-不允许连接”

■17002:“I/O异常”

=========================== 从数据源检索连接的代码

InitialContext ic = new InitialContext();
     com.sun.appserv.DataSource ds = (com.sun.appserv.DataSOurce) ic.lookup("jdbc/PointBase"); 
     Connection con = ds.getConnection();
     Connection drivercon = ds.getConnection(con);
Glassfish数据源javadoc是

如果您不想部署应用程序,而是使用远程glassfish服务器的数据源,请获取
initialcontext
,如下所示

Properties props=new Properties();    
            props.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");    
            props.put(Context.PROVIDER_URL,"iiop://URL_OF_APP_SERVER:PORT");    
            Context ctx=new InitialContext(props);    
            DataSource datasource = (DataSource)ctx.lookup("jndi/mydatasource");   

根据问题中的信息,您希望在Glassfish实例中创建一个jdbc资源,即数据源。您还可以为它创建一个连接池。请按照这个学习如何做。您必须更改代码,就像使用JNDI查找一样

   DataSource ds = (DataSource) new InitialContext().lookup("jdbc/YOUR_DATASOURCE_NAME");
   Connection con = ds.getConnection();

而不是使用具有数据库配置和凭据的DriverManager获取连接,因为所有这些信息都将在Glassfish服务器中配置为数据源。基于JNDI的数据源用于分离开发人员和部署人员的工作。开发人员不需要了解数据库服务器的配置。只需知道数据源名称就可以满足开发的需要。此外,管理多个应用程序以使用单个数据源连接到同一数据库非常简单,而无需在每个应用程序中单独部署数据源配置。我建议您查看(检查正确版本)错误代码,以明确处理案例。

以上链接是通过以下方式找到的:查看您的链接,它确实说明了这些错误代码,但这些是在使用Glassfish JDBC资源和JDBC连接池时出现的,还是这些错误代码在正常的独立应用程序下可以工作?对于datasource,您需要一个应用程序服务器。即使您的应用程序是独立的,它也需要引用某些应用服务器提供的JNDI。在您的情况下,服务器是glassfish。这是一个符合J2EE的服务器。因此,如果我不部署到Glassfish并按静态主方法中的上述代码运行应用程序,那么错误代码应该是相同的。您提供的这些错误代码是否仍能用于确定数据库是否已关闭?我已编辑了我的答案,并提供了有关此问题的更多信息。请检查。如果(e.getErrorCode()==12543)