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)