一、数据源的由来
JDBC操作主要由以下几步组成:
(1)Class.forName();
(2)Connection con = DriverManager.getConnection();
(3)PreparedStatement stat = con.prepareStatement(sql);
(4)stat.executeQuery();
(5)con.close();
很显然,(1)(2)(5)步是每次JDBC操作都要执行的,重复执行是非常耗时的,因此为了解决重复操作的问题,引入了数据源。
二、数据源介绍
存在一个数据库连接池,在池中存在多个数据库连接,用户对数据库操作时取出一个,用完放回连接池中。
考虑因素:
(1)最小连接数:连接池中最小的连接个数;
(2)最大连接数:连接池中最大连接个数;
(3)最大等待时间:不能连接时最长等待时间;
Tomcat对数据库连接池支持;
三、JNDI(Java Naming Directory Interface)
1.通过DataSource的名字查找对应的DataSource;
2.通过一个DataSource在连接池中获得一个Connection;
四、配置步骤
A 全局数据源的配置
全局数据源意思是配置了一个数据源后任何web应用都能够访问。
(1)将数据库的驱动程序复制到tomcatlib中;
(2)在server.xml中加入:
<Context path="/Test" docBase="E:JAVA WEB" reloadable="true"> <!-- 数据源需要在Context中配置-->
<Resource name="jdbc/xiazdong" <!-- 数据源名称-->
auth="Container"
type="javax.sql.DataSource"
maxActive="100" <!-- 最大连接数-->
maxIdle="30" <!-- 最小连接数-->
maxWait="10000" <!-- 最大等待时间-->
username="root"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/xiazdong"/>
</Context>
(3)在web.xml中加入:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/xiazdong</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
B 局部数据源配置
(1)将驱动器复制到tomcat/lib中;
(2)在conf/catalina/localhost/test.xml中添加:
- <Resource name="jdbc/test" auth="Container"
- type="javax.sql.DataSource"
- driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/javaee"
- username="root" password="12345" maxActive="5"
- maxIdle="2" maxWait="10000"/>
作为<Context>的子元素;
五、主要操作步骤
Context ctx = new InitialContext();
DataSource ds = ctx.lookup("java:comp/env/jdbc/xiazdong");
Connection con = ds.getConnection();
可以很清楚的看出,从以上代码完全看不出操作的是哪个数据库,配置都在配置文件中;