为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下java数据库连接池怎么用?

/ 猿问

请教一下java数据库连接池怎么用?

MMMHUHU 2019-10-21 16:14:43

java数据库连接池怎么用


查看完整描述

4 回答

?
SMILET

如何使用

DBCP

不足: Commons DBCP 1.x is single threaded. In order to be thread safe Commons locks the entire pool for short periods during both object allocation and object return. Note that this does not apply to Commons DBCP 2.x. Commons DBCP 1.x can be slow. As the number of logical CPUs grows and the number of concurrent threads attempting to borrow or return objects increases, the performance suffers. For highly concurrent systems the impact can be significant. Note that this does not apply to Commons DBCP 2.x. Commons DBCP is over 60 classes. tomcat-jdbc-pool core is 8 classes, hence modifications for future requirement will require much less changes. This is all you need to run the connection pool itself, the rest is gravy. Commons DBCP uses static interfaces. This means you have to use the right version for a given JRE version or you may see NoSuchMethodException exceptions. It’s not worth rewriting over 60 classes, when a connection pool can be accomplished with a much simpler implementation.


查看完整回答
反对 2019-10-26
?
慕工程0101907

对于简单的数据库操作,每次连接数据库时创建连接最费时间,而且如果操作频繁的话,会不停的创建数据库对象,然后销毁。这样效率就很低了,而且费时间,占内存。所以就需要使用连接池,由池创建一个几或几十个连接,然后放入池中,当需要用时,就从池中取出创建好的数据库连接,用完了并不断开数据库连接,而是放回池中,等待下次使用。
连接池的还有个优点就是能控制数据库的压力,当大量用户同时涌入时,连接池只会使用池限制数据库连接数目,而不会不停的向数据库请求连接,最后导致服务器崩溃。

查看完整回答
反对 2019-10-26
?
翻过高山走不出你

就是用的时候从池中取,用完以后再放回去。
就像图书馆,你可以借走看,看完以后再还回来,比如一种书有5本,10个人都可以借,但同一时刻,只能有5人可以借走看,看完以后还回来,其他人还可以借。一般每次请求数据库操作的时间不会很长,就可以用较少的物理连接,服务很多个客户请求。

查看完整回答
反对 2019-10-26
?
慕的地8271018

java连接SqlServer2008的数据库连接池使用:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Vector;
/**数据库连接池的公共类 **/
public class ConnectionPool {

private Vector<Connection> pool;//声明集合,里面只能是放Connection
/**
* 声明要的东西
*/
private String url = "jdbc:sqlserver://localhost:1433; database=ajax";

private String username = "sa";

private String password = "sa123";

private String driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

/**
* 连接池的大小,也就是连接池中有多少个数据库连接
*/
private int poolSize = 5;

private static ConnectionPool instance = null;

/**
* 私有的构造方法,禁止外部创建本类的对象,要想获得本类的对象,通过<code>getIstance</code>方法
* 使用了设计模式中的单子模式
*/
private ConnectionPool() {
init();
}

/**
* 连接池初始化方法,读取属性文件的内容 建立连接池中的初始连
*/
private void init() {
pool = new Vector<Connection>(poolSize);
//readConfig();
addConnection();
}

/**
* 返回连接到连接池
*/
public synchronized void release(Connection conn) {
pool.add(conn);
}

/**
* 关闭连接池中的所有数据库连接
*/
public synchronized void closePool() {
for (int i = 0; i < pool.size(); i++) {
try {
((Connection) pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}

/**
* 返回当前连接池的对象
*/
public static ConnectionPool getInstance() {
if (instance == null) {
instance = new ConnectionPool();
}
return instance;
}

/**
* 返回连接池中的一个数据库连接
*/
public synchronized Connection getConnection() {
if (pool.size() > 0) {
Connection conn = pool.get(0);
pool.remove(conn);
return conn;
} else {
return null;
}
}

/**
* 在连接池中创建初始设置的的数据库连接
*/
private void addConnection() {
Connection conn = null;
for (int i = 0; i < poolSize; i++) {

try {
Class.forName(driverClassName);
conn = java.sql.DriverManager.getConnection(url, username,
password);
pool.add(conn);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

}
}
}



查看完整回答
反对 2019-10-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信