动态web开发的最大特点是可以进行数据库的操作,传统的jdbc操作由于步骤重复性造成程序性能下降。
先来回顾JDBC的操作原理
1、加载数据库驱动程序,数据库驱动程序通过classpath配置。
2、通过DirverManager类取得数据库连接对象。
3、通过Connection实例化PreparedStatement对象,编写sql语句命令操作数据库。
4、数据库属于资源操作,操作完成后要关闭数据库以释放资源。
其实以上操作,1、2、4步骤是重复的,保留3,实际上就是数据源产生的原因。
数据源操作的核心原理是,在一个对象池中保存多个数据库的连接(也称作数据库连接池,Connection Pool),这样在进行数据库连接时,我们直接从连接池中取出一个数据库连接,当操作完成后,在把此连接放入到数据库连接池中。
其中有 一个 最小连接数, 最大连接数 , 最大等待时间 等问题。
在web容器中,所有的数据库的连接池都是通过数据源(javax,sql.DataSource)访问的,即可以通过这个类取得一个Connection对象,但是想要得到一个DataSource对象需要使用JNDI(Java Naming and Directory Interface命名及目录接口)进行查找。
首先一定要配置数据库驱动程序,一定要把数据库驱动复制到tomgcat的\common\lib文件夹中。
然后在server.xml中配置,在<Context>节点中增加一个<Resource>的节点,用来表示配置的连接池选项,其中name属性指的是此数据源的名称,此处为"jdbc/mldn"
,这个名称也是以后程序中访问数据库资源时需要用到的。其中节点中的auth选项表示的是连接数据库的两种选择,一个是Container:容器将代表应用程序登入到资源管理器,一般使用此方式;Application:应用程序必须程序化地登入到资源管理器。
<Context path="mldn" docBase="D:\webdemo" reload="true">
<Resource name="jdbc/mldn" 配置一个连接池资源,名称为jdbc/mldn
auth="Container" 容器负责资源的连接
type="javax.sql.DataSource" 此数据源名称对应的类型是DataSource
maxActive="100" 可以打开的最大连接数
maxIdle="30"位置的最小连接数
maxWait="10000"用户等待的最大时间
username="root"数据的用户名
password="root"数据库的密码
driverClassName="org.git.mm.mysql.Driver" 数据库的驱动程序
url="jdbc:mysql://localhost:3306/mldn/" 数据库名称
/>
</context>
在server.xml中配置完成之后就需要在一个WEB项目中配置web.xml文件,并在文件中申请要使用的数据源名称。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mldn</res-ref-name>
<res-type>javax.sql.DataSourve</res-type>
<res-auth>Container</res-auth>
</resource-ref>
数据源的使用的是JNDI方式查找,如果使用数据源取得数据库连接,必须按照下面的步骤进行。
1、初始化名称查找上下文:Contxt ctx=new InitialContext();
2、通过名称查找DataSource对象,DataSource ds=(DataSource)ctx.lookup(JNDI名称);
3、通过DataSource取得一个数据库连接:Connection conn=ds.getConnection();
但是在实际应用中 String DSNAME="java:comp/env/jdbc/mldn";JNDI名称, 前面加上了java:comp/env/的前缀,实际上是javaEE规定的一个环境命名上下文(Environment Naming Context (enc)),主要是为了解决JNDI查找时的冲突。