【问题标题】:How to manage connection to database SQL [duplicate]如何管理与数据库 SQL 的连接 [重复]
【发布时间】:2017-11-08 11:49:25
【问题描述】:

我有一个 SQL 数据库和一台运行 java 代码以从中获取信息的机器。
这台机器一直在监听一个端口。
起初我在每次查询后都关闭了连接,但增加的延迟很高。
所以我切换到从不关闭连接,现在连接在一段时间后关闭而没有使用(虽然延迟很低)。
因此,显然解决方案介于永不关闭和始终关闭之间。
处理与 SQL 数据库的连接的推荐启发式方法是什么?
现在我正在测试服务器,请求量很低。当服务器运行时,用户使用服务器的次数将超过现在使用的次数。我无法预测还有多少。

【问题讨论】:

  • google for dbcp

标签: java mysql jdbc


【解决方案1】:

为您的用例使用任何连接池。如果您使用的是应用服务器,您可以使用应用服务器连接池或使用开源 dbcp 连接池机制。

<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.2.2</version>
</dependency>

dbcp 配置link

import org.apache.commons.dbcp2.BasicDataSource;


public class DataBaseUtility
{
    private static BasicDataSource dataSource;

    private static BasicDataSource getDataSource()
    {

        if (dataSource == null)
        {
            BasicDataSource ds = new BasicDataSource();
            ds.setUrl("jdbc:mysql://localhost/test");
            ds.setUsername("root");
            ds.setPassword("password");


            ds.setMinIdle(5);
            ds.setMaxIdle(10);
            ds.setMaxOpenPreparedStatements(100);

            dataSource = ds;
        }
        return dataSource;
    }

    public static void main(String[] args) throws SQLException
    {

        try (BasicDataSource dataSource = DataBaseUtility.getDataSource(); 
                Connection connection = dataSource.getConnection();
                PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM account");)
        {
System.out.println("The Connection Object is of Class: "+connection.getClass());
            try (ResultSet resultSet = pstmt.executeQuery();)
            {
                while (resultSet.next())
                {
                    System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
                }
            }
            catch (Exception e)
            {
                connection.rollback();
                e.printStackTrace();
            }
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多