如何在Java中进行连接池管理?

4

我正在尝试理解Java中的连接池,我的应用程序中使用了JSP、Servlet和Tomcat 6服务器。我在一个名为"dbconnection.java"的Java类中编写了以下代码:

我正在使用Windows XP操作系统中的Oracle 10g EE进行类型为4的JDBC连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

    public class dbconnection {   
     public Connection con = null;    
      public Connection getConnection() throws Exception, SQLException
       {
         try
           {
          Class.forName("oracle.jdbc.driver.OracleDriver");
           con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:abc","abc", "abc");           
           }
           catch(Exception e)
           {          
           }
        return con;
        }
    public void removeConnection() throws SQLException
  {
    con.close();
  }
 }

然后我在servlet中按照以下方式检索connection

try{
 dbconnection db= new dbconnection();

 Connection con=db.getConnection();
 }
 catch(Exception e){
 } 
finally{
 db.removeConnection();//removes connection
}

Tomcat服务器中,是需要进行连接池配置或其他设置吗?


请查看此问答以获取更多信息:https://dev59.com/rnM_5IYBdhLWcg3wQQpd - Boris Pavlović
你的问题在这里得到了解答:https://dev59.com/93E85IYBdhLWcg3wUByz - Michael Fernando
1
不要这样写 catch(Exception e) { },这会让调试变得不可能。 - artbristol
@artbristol 那我应该如何编写catch语句呢?请帮我一下。 - sujit
已检查异常很烦人。我通常只是做 catch(Exception e) { throw new RuntimeException(e); },但这取决于情况。 - artbristol
@artbristol 谢谢,我已经将我的代码修改为你的代码。 - sujit
3个回答

6
一个连接池的运作方式是提前创建连接并保存起来。在 JDBC 的连接池中,一组 Connection 对象会在应用服务器启动时被创建。客户端可以访问连接池中的连接对象,在数据库操作完成后将其返回到连接池中。
Context.xml
   <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" 
maxActive="100" maxIdle="30" maxWait="10000" username="root" password="" 
driverClassName="com.mysql.jdbc.Driver"               
url="jdbc:mysql://localhost:3306/cdcol"/>

//这个应该添加到服务器上下文的xml文件中。例如,如果您使用Apache服务器,则context.xml将在C:\ apache-tomcat-6.0.26 \ conf \ Context.xml中找到。

web.xml

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

//这应该添加在本地项目的web.xml中。(不是服务器的web.xml)。

Context ctx=new InitialContext();
          Context envContext = (Context)ctx.lookup("java:comp/env");
          DataSource ds=(DataSource)envContext.lookup("jdbc/TestDB");//TestDB is the Database Name
          con=ds.getConnection();
          stmt = con.createStatement();

我之前已经提醒过您,链接到自己的网站时需要披露此事。此外,您的博客文章并没有回答上述问题...... 您在这里的文字也是如此。 - Andrew Barber
这个问题是关于如何进行连接池管理,提问者也要求了一个例子。因此,我引导他到一个介绍连接池管理的网站,并给出了实现示例。 - eshwar
你没有透露这是你的网站,而你在这里的文字只是解释了什么是连接池。那不是一个答案。 - Andrew Barber
修改了答案,现在可以了吗? - eshwar

3

1

连接池是所有主要的Web和应用程序服务器中可用的功能。您可以在配置Tomcat时找到简单的示例。Tomcat连接池

但是,如果您想编写自己的连接池,则有可用的库可供编写。Apache DBCP


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接