Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何关闭DriverManager数据源连接?_Java_Spring_Jdbc - Fatal编程技术网

Java 如何关闭DriverManager数据源连接?

Java 如何关闭DriverManager数据源连接?,java,spring,jdbc,Java,Spring,Jdbc,我正在尝试关闭DriverManager数据源的连接,如下所示: public final class DbConnect { private static final Logger LOG = Logger.getLogger(DbConnect.class); public static DriverManagerDataSource getDataSource(String dbHost, int dbPort, String dbUser, String dbPassword, Str

我正在尝试关闭
DriverManager数据源的连接,如下所示:

public final class DbConnect {
private static final Logger LOG = Logger.getLogger(DbConnect.class);

public static DriverManagerDataSource getDataSource(String dbHost, int dbPort, String dbUser, String dbPassword, String dbSID)
{
    LOG.info("getDataSource");
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setDriverClassName("oracle.jdbc.OracleDriver");

    ds.setUrl(String.format("jdbc:oracle:thin:@%s:%d:%s",  dbHost, dbPort, dbSID));
    LOG.info("url: " + ds.getUrl());
    ds.setUsername(dbUser);
    ds.setPassword(dbPassword);
    try {
        ds.getConnection().setAutoCommit(true);
    } catch (SQLException e) {

        LOG.info("Could not set db connecion to autocommit", e);
    }
    return ds;
}

/**
 * Test connection to Database
 * @param dbHost Database host name or IP
 * @param dbPort Database port number
 * @param dbUser Database user name
 * @param dbPassword Database password
 * @param dbSID Database service ID
 * @return true if connection successful or throws CmException in case of failure
 */
public static boolean testConnection(String dbHost, int dbPort, String dbUser, String dbPassword, String dbSID) throws CmException
{
    DriverManagerDataSource ds = getDataSource(dbHost, dbPort, dbUser, dbPassword, dbSID);
    JdbcTemplate select = new JdbcTemplate(ds);
    try {
        select.queryForInt("SELECT 1 from DUAL");
    } catch (Throwable ex){
        LOG.info("Could not connect to DB: " + ex.getMessage(), ex);
        throw new CmException(ex.getMessage());
    } finally {
        closeDBConnection(ds);
    }

    return true;
}

public static void closeDBConnection(DriverManagerDataSource ds) 
{
    LOG.debug("Close the DB connection");
    if(ds == null) { return; }
    try {
        LOG.debug("Getting the connection from data source");
        Connection conn = ds.getConnection();
        if(conn != null) {
            LOG.debug("Try closing the connection");
            conn.close();
        }
    } catch (Exception ex) {
        LOG.error("Could not close connection to DB: " + ex.getMessage(), ex);
    }
}
} }


但是请注意,连接没有关闭,我所做的是关闭打开的连接的正确方法吗?如果没有,我如何改进我的代码?

您是否使用资源尝试了
try
?像
try(Connection conn=ds.getConnection()){…}catch(Exception ex){…}
?这将自动关闭连接。您在
连接上关闭连接
而不是在
数据源上关闭连接
用户
尝试使用资源
或在
最后关闭它
块什么不起作用?这个代码的目的是什么?您只需创建一个新连接并立即关闭它。你期待什么?我已经添加了完整的代码,在这里我调用了
closeConnection
方法
JdbcTemplate
为你关闭它。把那些讨厌的东西都拿走。