java连接数据库的几种方式(转)

来源:互联网 发布:java常见项目 知乎 编辑:程序博客网 时间:2024/06/12 18:30

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.         InputStream is = (InputStream) this.getClass().getResourceAsStream(  
  14.                 "/db.properties");//创建输出流  
  15.         try {  
  16.             load(is);//读取流  
  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.             instance = 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获取

 

      使用JNDI,数据库连接,数据池和连接的管理都在J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

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

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

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

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.             Context context = new InitialContext();  
  15.             DataSource source = (DataSource) context  
  16.                     .lookup("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 等

   1) 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的连接池


 

   


    





原创粉丝点击