JDBC硬编码连接


view plain



1. import java.sql.Connection;  
2. import java.sql.DriverManager;  
3. import java.sql.SQLException;  
4.   
5. public class JDBCConn {  
6. public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
7. public static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=books";  
8. public static final String USER = "sa";  
9. public static final String PWD = "ok";  
10. private Connection conn = null;  
11.   
12. public Connection getConn() {  
13. try {  
14.             Class.forName(DRIVER);  
15.             conn = DriverManager.getConnection(URL,USER,PWD);  
16. catch (ClassNotFoundException e) {  
17. // TODO Auto-generated catch block  
18.             e.printStackTrace();  
19. catch (SQLException e) {  
20. // TODO Auto-generated catch block  
21.             e.printStackTrace();  
22.         }  
23. return conn;  
24.     }  
25. }


 

读取propperties配置文件连接

1.创建读取配置文件的类

 


view plain



    1. import java.io.IOException;  
    2. import java.io.InputStream;  
    3. import java.util.Properties;  
    4. /**
    5.  * 单列类:获取属性文件
    6.  * @author macau
    7.  */  
    8. public class Env extends Properties {  
    9. /**
    10.      * 构造方法
    11.      */  
    12. private Env() {  
    13. this.getClass().getResourceAsStream(  
    14. "/db.properties");//创建输出流  
    15. try {  
    16. //读取流  
    17.             is.close();  
    18. catch (IOException e) {  
    19.             e.printStackTrace();  
    20.         }  
    21.     }  
    22.   
    23. private static Env instance;//当前类实例  
    24.   
    25. /**
    26.      * 获得当前实例
    27.      * @return
    28.      */  
    29. public static Env getInstance() {  
    30. if (instance == null) {  
    31.             makeInstance();  
    32.         }  
    33. return instance;  
    34.     }  
    35.   
    36. /**
    37.      * 创建当前类实例
    38.      */  
    39. private static synchronized void makeInstance() {  
    40. if (instance == null) {  
    41. new Env();  
    42.         }  
    43.     }  
    44. }


    2.通过读取配置文件的类获取数据库连接参数

     


    view plain


    1. import java.sql.Connection;  
    2. import java.sql.DriverManager;  
    3. import java.sql.SQLException;  
    4.   
    5. public class PropConn {  
    6. private String driver = Env.getInstance().getProperty("driver");  
    7. private String url = Env.getInstance().getProperty("url");  
    8. private String user = Env.getInstance().getProperty("user");  
    9. private String pwd = Env.getInstance().getProperty("pwd");  
    10.       
    11. private Connection conn = null;  
    12.       
    13. public Connection getConn(){  
    14. try {  
    15.             Class.forName(driver);  
    16.             conn = DriverManager.getConnection(url,user,pwd);  
    17. catch (ClassNotFoundException e) {  
    18. // TODO Auto-generated catch block  
    19.             e.printStackTrace();  
    20. catch (SQLException e) {  
    21. // TODO Auto-generated catch block  
    22.             e.printStackTrace();  
    23.         }  
    24. return conn;  
    25.     }  
    26. }

     

    配置JNDI获取


    J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

                在应用服务器连接池里进行数据库连接以及对应的jndi配置,配置好的JNDI的名称为 jdbc/myds

         接下来在spring利用JNDI配置数据源 

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
             <property name="jndiName"><value>jdbc/myapp</value></property>


    1.在Tomcat安装目录的conf目录下的context.xml文件的<Context/>标记中添加配置


    view plain



      1. <Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource"  
      2. maxActive="1000" maxIdel="30" maxWait="10000"  
      3. username="sa" password="ok"  
      4. driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"  
      5. url="jdbc:sqlserver://localhost:1433;DatabaseName=books" />


      2.编码获取数据库连接


      view plain



      1. import java.sql.Connection;  
      2. import java.sql.SQLException;  
      3.   
      4. import javax.naming.Context;  
      5. import javax.naming.InitialContext;  
      6. import javax.naming.NamingException;  
      7. import javax.sql.DataSource;  
      8.   
      9. public class JNDIConn {  
      10. private Connection conn = null;  
      11.   
      12. public Connection getConn() {  
      13. try {  
      14. new InitialContext();  
      15.             DataSource source = (DataSource) context  
      16. "java:comp/env/jdbc/books");  
      17.             conn = source.getConnection();  
      18. catch (NamingException e) {  
      19.             e.printStackTrace();  
      20. catch (SQLException e) {  
      21.             e.printStackTrace();  
      22.         }  
      23. return conn;  
      24.     }  
      25. }


      连接池

          1.  目前开源的连接池有

      Proxool  DBCP  DBPool 等

       dbcp
             dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
      这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
      使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
      有所下降,此外不提供连接池监控

         2)proxool
           proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
      这个连接池的配置参见附件压缩包中的:proxool.xml。
      使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码
      在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
      但是proxool有一个优势--连接池监控,这是个很诱人的东西,大概的配置方式就是在web.xml中添加如下定义:

      <servlet>
               <servlet-name>admin</servlet-name>
               <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>     
          </servlet>
          <servlet-mapping>
             <servlet-name>admin</servlet-name>
             <url-pattern>/admin</url-pattern>
          </servlet-mapping>


      并在应用启动后访问:http://localhost:8080/myapp/admin这个url即可监控
      不过proxool本身的包在监测使用中会有编码问题,附件中有一个
      解决此问题的包,参见附件压缩包中的:proxool-0.9.0RC3.jar。另外需要jdk1.5以上的环境。

       2. 商业连接池

      weblogic的连接池

      websphere的连接池