忘了说了,我的具体配置:操所系统:WinXP
服务器:Tomcat5.0
数据库:MySQL
呵呵,刚刚学了mysql,不知道怎么用请大家指教

解决方案 »

  1.   

    你每次用完了要关闭。conn.close(); 
    就是返回给连接池供下次使用。
      

  2.   

    仅供参考,
    Java 的JDBC 数据库连接池实现方法
    http://www.csdn.net/Develop/read_article.asp?id=21140
      

  3.   

    这就是我的疑问所在,既然我关闭了连接,那么下次再使用的时候还是要新建一个数据源与数据库的连接阿,这样使用数据源的优势不就没有了吗?呵呵,我是菜鸟,可能说的不对,请指教,^_^
    ============
    我想主要是你对连接池的理解有偏差。
    dataSource.getConnection()意思是从连接池里(借)取一个出来用,用完后close() 相当于返还给连接池。这个关闭并没有真正从数据库库断开。而是将连接返回给连接池,并且由 App Server 一直保持在那里(在设定最大闲置时间内)。这么做的好处是,假设你短时间里有很多数据库操作,不必每次都进行连接数据库的操作,这样可以提高效率。
    连接池实际上就是你说的这个数据源(DataSource)。在App Server没关闭之前它一直在那里。
    当然闲置时间太长(假如你很长时间没进行数据库操作)了连接池也会把里面的连接断开。
    而你前面说的“我在数据源中定义的maxActive是20,我在刷新我的主页20次后网站就没有反应了”
    最可能的原因就是你再使用完后没有关闭连接。而连接池里的连接已经达到了最大的数目。所以没得多余的连接可拿了。例如,如果你2次都使用了dataSource.getConnection()并且没有关闭,那么你这2次打开了不同的连接,这样最多你只能打开20次。如果你每次都关闭了,再getConnection那么你实际上与数据库之间只有一个连接。当然如果你的程序是多线程的那就说不定了。
    希望这样说能对你有所帮助。
      

  4.   

    楼上的谢谢了,不过Connection类的close()方法不都是关闭与数据库的连接吗?难道还会因为得到链接的方式不同而有什么不同吗
      

  5.   

    楼上的谢谢了,认识加深了,不过Connection类的close()方法不都是关闭与数据库的连接吗?难道还会因为得到链接的方式不同而有什么不同吗
      

  6.   

    没错。Connection 只是一个接口,用dataSource.getConnection得到的Connetion
    是一个依赖具体的 连接池实现的类,在这个类中的close方法肯定不是直接断开。如果直接使用JDBC的Connection实现,那应该就是断开了。如果你要深入了解,可以查看相应的源代码。比如apache有个叫dbcp的实现,里面的做法很经典,值得研究。
      

  7.   

    usabcd(9号公路上的3名共军),谢谢你^_^,我的QQ号是393463165,不介意的话就加我吧,我现在还是山东大学计算机的学生,没毕业呢。
    再问你一下,如果关闭了Connection,ResultSet怎么弄呢?关闭了Connection以后ResultSet就不能用了啊。