2012-02-16 63 views
0

当前,我加载下面的自定义驱动程序(TestDriver.java),获取连接,创建语句,执行查询,获取结果并关闭连接。我打开并关闭每个查询的连接。这是常见的做法还是有共享开放连接的标准方式?自定义java.sql.Driver实现连接处理

public static void main(String[] args) { 
     Class.forName("com.sql.TestDriver"); 
     java.sql.Connection conn = DriverManager.getConnection("jdbc:test://8888/connectme", props); 
     Statement stmt = conn.createStatement; 
     ResultSet rs = stmt.executeQuery("select * from table"); 
     //loop through rs and pull out needed data 
     conn.close(); 
    } 


    public class TestDriver implements java.sql.Driver{ 
     private final TestSchema schema; 
     private Properties props = null; 
     static { 
      try { 
       DriverManager.registerDriver(new TestDriver()); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 

     protected TestDriver() throws SQLException { 
      schema = TestSchemaFactory.getInstance().getDbSchemaFromFile(SCHEMA_FILE); 
      //loads in and parses a file containing tables, columns used for business logic 
     } 
     public Connection connect(String url, Properties info) 
       throws SQLException { 
      TestSqlConnection conn=null; 
      //connect logic here 
      return conn; //will return an instance of TestSqlConnection 
     } 

    @Override 
    public boolean jdbcCompliant() { 
     return false; 
    } 
} 

回答

1

是的,使用数据库连接池更为常见。这将允许连接重复使用而不需要开销或关闭/重新打开。下面是DBCP一个链接,是一个数据库连接池的一种实现方式:http://commons.apache.org/dbcp/

1
  1. 理想情况下,你应该写一个单独的工厂类(可以是静态的) 说连接工厂返回一个连接对象。
  2. 我也看到你不使用,同时创造 connection.I的try/catch/finally块强烈建议关闭在最后 子句中的连接,否则你程序可以从连接泄漏遭受如有 引发异常,并导致突然行为。
  3. 理想情况下应关闭操作之后的连接是基于最终 clause.In Web应用程序完成,如果您使用连接池 然后关闭连接将返回连接返回到池和 将可供使用。
+0

伟大的评论。我的Java主只是一个例子。你所有的评论都是有效的。 – c12 2012-02-16 02:38:26