日期:2014-05-20  浏览次数:20755 次

很多请求只打开一个数据库连接行吗?
连接oracle,只用同一个数据库ssid,用同一个用户名和密码,要查询各种表,各种增删改查的操作,就是说有很多请求,很多statement和resultset,并且要插入很多数据
但是我获取连接时写一个单例模式,整个程序使用的是同一个连接,这样程序长时间的执行会出错吗?性能上好不好?

Java code

public  Connection getConnection(){    
    try {
            Class.forName(oraDrv);
            if(conn==null||conn.isClosed())
                conn=DriverManager.getConnection(oraUrl, oraUs, oraPsw);
        } catch (Exception e) {
            e.printStackTrace();
        }    
     return conn;
 }



c3p0是多线程多个连接,我不懂,反复打开连接不是会耗时吗,比如插入一条记录就打开关闭一次连接会很慢吧?为什么不都用一个连接呢?

听说c3p0有bug,网上查是什么append deadlock的bug,别人有个程序用的spring 的jdbctemplate,结果插入30条数据就卡了速度很慢。用性能监视看到线程越来越多,可能是程序没写好,但c3p0确实有很多bug吗?那是不是该用dhcp或别的什么连接池?

------解决方案--------------------
c3p0 连完数据库 得把连接放开,多注意注意就好了。

按你的要求 可以 用jdbc 把所有请求 都放在一个任务列表中,任务依次执行,数据库连接不放开。但是,高并发下,这总方法就不太推荐了
------解决方案--------------------
Connection不是线程安全的
------解决方案--------------------
一个连接打开时间长了会自动关闭的,这样再运行程序就会报连接已关闭的错误。况且一个连接能打开的连接数可能也有限。
c3p0用的好的话问题不大。