MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 数据库连接池到底有什么用?一个静态的Connection对

数据库连接池到底有什么用?一个静态的Connection对象不也可以让多个线程共享吗?解决方案

www.MyException.Cn  网友分享于:2013-02-01  浏览:28次
数据库连接池到底有什么用?一个静态的Connection对象不也可以让多个线程共享吗?
我就想不明白为什么 连接池 里面要用缓存一定数量的Connection对象,用一个静态的Connection对象不也可以多线程共享吗?我实在看不出这样会有什么问题,谁能说一下这个问题?

public class ConnectionProvider {
//a static variable of type Connection
private static Connection INSTANCE = initializeConnection();

private static Connection initializeConnection() {

String driver = "org.gjt.mm.mysql.Driver";
String db_url = "jdbc:mysql://127.0.0.1/mydata";
String username = "root";
String password = "root";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(db_url, username, password);
System.out.println(conn.getCatalog());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(conn + "--Connection initialized.");
return conn;
}

//after the initialization work's been done, this method returns the SAME Connection object when requested
public static Connection getConnection() {
return INSTANCE;
}
}
---------------------------------------------------------
以下创建了100个线程,获得同一个Connection对象,并执行一个插入的操作
public class Test {
public static void main(String args[]) {

for(int i = 0; i < 1000; i++) {
new MyThread().start();
}
}
}

class MyThread extends Thread{
public void run() {
Connection conn = getConnection();
try {
//sleep for one second so that other threads have chances to run and obtain the SAME Connection object 
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
doSomethingWithDB(conn);
}

private Connection getConnection() {
return ConnectionProvider.getConnection();
}

private void doSomethingWithDB(Connection conn) {
String sql = "INSERT INTO test(id, content) VALUES(null, ?)";
try {
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1, Thread.currentThread().getName());

int flag = pstm.executeUpdate();
if(flag == 1)
System.out.println(Thread.currentThread().getName() + ": Data inserted successfully!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}

------解决方案--------------------

我觉得数据库连接池就是为了解决资源的频繁分配和释放所造成的问题。为解决这些问题,采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调整提供依据。
楼主那种做法虽说也实现了,但是从效率上和智能上,都不是太理想,你必须要自己关闭Connection连接,所以,是属于人工的,而数据库连接池是属于智能的!说的不对的地方,请指教!

------解决方案--------------------
我要是一直拿着连接,不释放呢?
------解决方案--------------------
那事务你怎么处理!这样就存在读【脏数据】问题!所以必须分开连接

文章评论

我的丈夫是个程序员
我的丈夫是个程序员
代码女神横空出世
代码女神横空出世
程序员和编码员之间的区别
程序员和编码员之间的区别
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员必看的十大电影
程序员必看的十大电影
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
中美印日四国程序员比较
中美印日四国程序员比较
每天工作4小时的程序员
每天工作4小时的程序员
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
我是如何打败拖延症的
我是如何打败拖延症的
编程语言是女人
编程语言是女人
10个调试和排错的小建议
10个调试和排错的小建议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
 程序员的样子
程序员的样子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员应该关注的一些事儿
程序员应该关注的一些事儿
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
那些争议最大的编程观点
那些争议最大的编程观点
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Java程序员必看电影
Java程序员必看电影
老程序员的下场
老程序员的下场
程序员的鄙视链
程序员的鄙视链
程序员都该阅读的书
程序员都该阅读的书
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
鲜为人知的编程真相
鲜为人知的编程真相
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有