DriverManager DataSource

本文对比介绍了JDBC中DriverManager和DataSource的区别与使用方法。DriverManager适用于简单的应用场景,而DataSource则更加适合部署在服务器上使用,它支持连接池管理,提高了数据库连接的复用效率。文章还详细解释了如何通过JNDI、Apache DBCP和C3P0创建DataSource。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:

DriverManager是驱动管理器,DataSource是数据源,一般DataSource是建立在DriverManager的基础上的,配合一个连接池的实现 。

 

1.DriverManager

DriverManager传统的jdbc连接,通过Class.forName("xxx")的办法注册之后,就可以DriverManager.getConnection()获得连接了。

 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
public class DBConnection { 
        private static String driverClass = "com.mysql.jdbc.Driver"; 
        private static String url = "jdbc:mysql://localhost:3306/test"; 
        private static String username = "root"; 
        private static String password = "123456"; 
        private static Connection conn = null; 
        static{ 
            try { 
                //注册驱动 
                // 不要把conn = DriverManager.getConnection(url, username, password); 
                 //放在这里。防止所有用户都用一个Connection 
                  Class.forName(driverClass);  
                 } catch (Exception e) { 
                          throw new RuntimeException(e); 
                 } 
       } 

       public static Connection getConnection() throws SQLException{ 
            conn = DriverManager.getConnection(url, username, password); 
            return conn; 
      } 
   } 


2.DataSource

 

DataSource有很多实现。

(1)jndi方式创建DataSource

以jndi方式创建数据源首先要配置数据源的相关连接信息,也就是数据连接池。该配置应该在Tomcat安装目录下的conf/context.xml文件中配置,在eclipse的j2ee架构下,也可以把context.xml文件创建在/META-INF目录下。基配置如下:

 

<Context><!--MySql-->
<Resource name="jdbc/movie" auth="Container" type="javax.sql.DataSource"
             maxActive="100" maxIdle="30" maxWait="10000"
             username="[用户名]" password="[密码]" driverClassName="com.mysql.jdbc.Driver"
             url="jdbc:mysql://localhost:3306/[实例名]?autoReconnect=true"/>
</Context>

 

public static DataSource getDataSource() {
		DataSource ds = null;
		try {
			// tomcat数据源连接与weblogic不同, 建立if...else...分支
			if(appSrvType == SysConfig.APPSRV_TOMCAT) {
				Context initCtx = (Context) new javax.naming.InitialContext();
	            Context envCtx = (Context) initCtx.lookup("java:comp/env");
				ds = (DataSource) envCtx.lookup(SysConfig.DATASOURCE_NAME);
			} else {
				Hashtable ht = new Hashtable();
				ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
				Context initContext = new InitialContext(ht);
				ds = (DataSource) initContext.lookup(SysConfig.DATASOURCE_NAME);
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error("无法通过JNDI找到数据源,请配置jdbc数据源:" + SysConfig.DATASOURCE_NAME);
		}
		return ds;
	}


(2)以Apache提供的简单连接池创建DataSource

 

 

以这种方式创建数据源必须先准备两个jar文件:commons-dbcp.jar 和 commons-pool.jar,将这两个jar包放到WEB-INF/lib目录下。以这种方式创建的数据源就不再是javax.sql.DataSource了,而是org.apache.commons.dbcp.BasicDataSource。而且不再需要配置任何文件就可以直接使用。代码如下:

 

// 创建BasicDataSource对象
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUrl("jdbc:mysql://localhost:3306/[实例名]");
    ds.setUsername("[用户名]");
    ds.setPassword("[密码]");
    ds.setInitialSize(50);
    ds.setMaxActive(100);
    ds.setMaxIdle(30);
    ds.setMaxWait(10000);
 // 关闭数据源连接
    ds.close();

 

 

(3)C3P0方式创建DataSource

 

 

使用C3P0方式创建数据源应该首先准备一个jar文件:c3p0-0.9.1.2.jar,将其放到WEB-INF/lib目录下,就可以在项目中使用C3P0创建数据源,C3P0创建的数据源对象也不是DataSource对象,而是ComboPooledDataSource。

 

// 创建ComboPooledDataSource对象
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/[实例名]");
ds.setUser("[用户名]");
ds.setPassword("[密码]");
ds.setInitialPoolSize(50);
ds.setMaxPoolSize(100);
ds.setMaxIdleTime(10000);

 

最后欢迎大家访问我的个人网站: 1024s

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值