概述:
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