我写了一个单例类来获取数据库连接。
现在我的问题是:假设有100个用户正在访问该应用程序。如果一个用户关闭连接,对于其他99个用户,连接是否关闭?
这是我的示例程序,它使用单例类获取数据库连接:
public class GetConnection {
private GetConnection() { }
public Connection getConnection() {
Context ctx = new InitialContext();
DataSource ds = ctx.lookup("jndifordbconc");
Connection con = ds.getConnection();
return con;
}
public static GetConnection getInstancetoGetConnection () {
// which gives GetConnection class instance to call getConnection() on this .
}
}
请指导我。
只要您不在通话中返回 同一
Connection
实例,就不必getConnection()
担心。然后,每个调用者都将获得自己的实例。到目前为止,您将在每个getConnection()
调用上创建一个全新的连接,因此不会返回任何静态或实例变量。这样很安全。
但是,这种方法笨拙。不必是单身人士。辅助/实用程序类也很好。或者,如果您想要更多的抽象,可以使用抽象工厂返回的连接管理器。我只更改它即可在类初始化期间获取一次数据源,而不是每次都在中获取数据源getConnection()
。无论如何,都是同一实例。保持便宜。这是一个基本的启动示例:
public class Database {
private static DataSource dataSource;
static {
try {
dataSource = new InitialContext().lookup("jndifordbconc");
}
catch (NamingException e) {
throw new ExceptionInInitializerError("'jndifordbconc' not found in JNDI", e);
}
}
public static Connection getConnection() {
return dataSource.getConnection();
}
}
根据常规的JDBC习惯用法如下。
public List<Entity> list() throws SQLException {
List<Entity> entities = new ArrayList<Entity>();
try (
Connection connection = Database.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, foo, bar FROM entity");
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
Entity entity = new Entity();
entity.setId(resultSet.getLong("id"));
entity.setFoo(resultSet.getString("foo"));
entity.setBar(resultSet.getString("bar"));
entities.add(entity);
}
}
return entities;
}
问题内容: 我有些困惑,我从阅读以下内容 你不需要关闭conn连接吗?如果conn.close()没有发生,那实际上是怎么回事? 我有一个正在维护的私有Web应用程序,该应用程序当前无法关闭任何一种形式,但是重要的应用程序真的是stmt,conn还是两者兼而有之? 该站点间歇性地关闭,但是服务器一直在说这是数据库连接问题,我怀疑它没有关闭,但是我不知道该关闭哪个。 问题答案: 使用完之后,你需要通
问题内容: 用Java创建单例的最佳方法是什么?数据库连接是否应该是单例连接(单例连接是自动线程安全的)?因为理论上数据库不能被许多用户同时访问。 问题答案: 数据库连接通常不应为单例。 两个原因: 许多数据库驱动程序不是线程安全的。使用单例意味着如果您有多个线程,它们将共享同一连接。单例模式不会给您带来安全感。它仅允许许多线程轻松共享“全局”实例。 就我个人而言,我认为Singleton通常会导
我正在尝试使用python和MySQL开发药房管理系统。但我在连接数据库时遇到了问题。 下面是一些代码:
问题内容: 已关闭 。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我正在开发需要远程数据库连接的客户端服务器应用程序。 我知道网络上的教程以及越来越多的人正在使用PHP与MySQL进行交互。但是,我不太擅长PHP,以前的经验是使用Core Java,Swing和JDBC。 如果可以在Android应用程序中使用JAVA
我已经检查了数据库运行良好。当发生这种情况时,我必须重新启动我的spring-boot应用程序。我怎么检查问题是什么?为什么数据库连接被关闭了?如果发生这种情况,我是否可以重新连接数据库?下面是我的应用程序.属性:
问题内容: 我正在做这样的事情… 自动提交更改。但是文档对关闭连接一无所知。 实际上,我可以在以后的语句(已测试)中使用。因此,似乎上下文管理器没有关闭连接。 我是否必须手动关闭连接。如果我打开它怎么办? 编辑 我的发现: 我已经测试并确认了上下文管理器中的 连接未关闭 。在之后,上下文管理器仅通过执行以下操作来提交更改: 并且相同,因此使用其中任何一个仍将保持连接活动 语句不会创建新的作用域,因