把连接池部分做成一个类, 其它servlet调用这个类中的getConnection()方法就可以了.

解决方案 »

  1.   

    楼主,帮我看看这个.是关于Tomcat的
    http://community.csdn.net/Expert/topic/3340/3340504.xml?temp=.8272821
      

  2.   

    对呀, 像 Goal3(拼命三郎)  说的那样:
    把连接池部分做成一个类, 其它servlet调用这个类中的getConnection()方法就可以了.例子:public class OracleDB {
        String url_  = "192.168.1.41:1521:gxcring";
        //String url_ = "172.18.51.101:1521:SUNDB";
        String id_ = "user";
        String pass_ = "12345";    Connection conn = null;
        Statement stmt = null;    public OracleDB() {
            try {
                //Class.forName("oracle.jdbc.driver.OracleDriver");
                //conn = DriverManager.getConnection("jdbc:oracle:thin:@" + url_, id_, pass_);
                Context initContext = new InitialContext();
                Context envContext = (Context) initContext.lookup("java:/comp/env");
                DataSource ds = (DataSource) envContext.lookup("jdbc/OracleDB");
                conn = ds.getConnection();            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                            ResultSet.CONCUR_UPDATABLE);
            } catch (NamingException ne) {
                System.out.println("Initial DataSource error.");
                ne.printStackTrace();
            } catch (SQLException e) {
                System.out.println("ORACLE: " + e);
                e.printStackTrace();
            }
        }    /**
         * 返回Connction对象
         * @param none
         * @return Connction
         */
        public Connection getConn() {
            return this.conn;
        }

    在其它的servlet中,只要
    OracleDB DB = new OracleDB();
    Connection conn = DB.getConn();
    就可以用了。
      

  3.   

    你这样的话还是必定每次都要执行构造器中的代码
    我的意思是构造器中这部分代码只执行一次,然后都从第一次产生的DataSource得到conn 
    有没办法
      

  4.   

    各位,不知道这样可不可以(把 Tasia(这里是CSDN吗?) 的稍做改动)
    public class OracleDB {    Connection conn = null;
        static DataSource ds = null;
        public static Connection getConnect() {
                 if(ds==null){
            try {
                Context initContext = new InitialContext();
                Context envContext = (Context) initContext.lookup("java:/comp/env");
                ds = (DataSource) envContext.lookup("jdbc/OracleDB");
            } catch (NamingException ne) {
                System.out.println("Initial DataSource error.");
                ne.printStackTrace();
            } catch (SQLException e) {
                System.out.println("ORACLE: " + e);
                e.printStackTrace();
            }
        }
       }
        
            return ds.getConnect();
       }
        

      

  5.   

    没有人有意见
    对了java的基础我都忘记了
    静态字段是以什么形态存在的
      

  6.   

    以单件模式实现DataSource的取出就可以了.Singleton
      

  7.   

    楼上的几位应该只是获取连接的方法,没有用到连接池的概念。在tomcat的context中加上:
    <Context path="/pcmateweb" docBase="" debug="0" reloadable="true">
    <Resource name="jdbc/DbConnect" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/DbConnect">
      <parameter>
       <name>maxActive</name>
       <value>100</value>
      </parameter>
      <parameter>
       <name>maxIdle</name>
       <value>30</value>
      </parameter>
      <parameter>
       <name>maxWait</name>
       <value>10000</value>
      </parameter>
      <parameter>
       <name>removeAbandoned</name>
       <value>true</value>
      </parameter>
      <parameter>
       <name>removeAbandonedTimeout</name>
       <value>60</value>
      </parameter>
      <parameter>
       <name>logAbandoned</name>
       <value>false</value>
      </parameter>
      <parameter>
       <name>factory</name>
       <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      </parameter>
      <parameter>
       <name>username</name>
       <value>sa</value>
      </parameter>
      <parameter>
       <name>password</name>
       <value>sa</value>
      </parameter>
      <parameter>
       <name>driverClassName</name>
       <value>net.sourceforge.jtds.jdbc.Driver</value>
      </parameter>
      <parameter>
    <name>url</name>
    <value>jdbc:jtds:sqlserver://dbserver:1433/dbname;SelectMethod=Cursor</value>
      </parameter>
    </ResourceParams>
    </Context>然后代码理:
    public static Connection getConnection()
    {
    Context ctx = null;
    Connection conn = null; try
    {
    ctx = new InitialContext();
    if (ctx == null)
    System.out.println("initial context failed");
    DataSource ds =
    (DataSource)ctx.lookup("java:comp/env/jdbc/DbConnect");
    if (ds == null)
    {
    System.out.println("java:comp/env/jdbc/DbConnect not found");
    }
    else
    {
    conn = ds.getConnection();
    }
    }
    catch (Exception ex)
    {
    System.err.println("[getConnection]-" + ex.getMessage());
    }
    return conn; }
    就可以了。
      

  8.   

    楼上说的Context,DataSource还是要重复的创建
    能不能只创建一次啊各位?这样多浪费啊!
      

  9.   

    如果你只想创建一次,你可以把getConnection()方法写成一个静态的不就可以了吗?如:
    public Static Connection getConnection()就行了。这样以后你就不需要创建对象,只接通过类名就可以调用而得到数据库的连接了。
      

  10.   

    同意楼上的说法,用Singleton方法只会产生对象的一个实例,不论你调用N次