今天在看一个小的项目时候,第一次见到InitialContex这个类,感觉好神奇,他的一个方法loookup()似乎好牛逼,于是网上查了查,原来是与JNDI有关的一个类,由javax提供,详细的使用我也不是很明白,没有使用过,简单的使用还是能够明白的,下面就依据我遇到的小实例分析:
1、首先配置数据源以及数据库驱动,这个必须啊,否则,在牛逼的类也找不到你的数据源;
2、配置数据源:在tomcat的context中进行配置;
3、然后,在你的项目使用InitialContext这个类便可以了:
Context initContext = new InitialContext();
DataSource ds = initContext.lookup(dataSourceName);
4、 这样你的数据源便被找到了,你就可以直接使用ds了;
使用InitialContext加载的数据源之后,你可以下载 Apache 组织提供的一个开源 JDBC 工具类库;这个类库的方法,看上去使用和Hibernante多少有些类似,悲哀的是这个依然不是面向对象的操作数据库,下面介绍这个类库:
1、QueryRunner qr = new QueryRunner(ds);
2、得到QueryRunner之后,便可以调用这个类库中的方法了,依照参数传值就可以;
一个详细的利用InitialContext以及JDBC 工具类库的代码如下:
前提是你数据源已经配置,有相关数据库的驱动,你可以将这个代码作为工具来;
package com.cjg.tool; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; public class OracleTool { private String dataSourceName; private DataSource ds; public OracleTool(String dataSourceName) { this.dataSourceName = dataSourceName; } public OracleTool() { } public void setDataSourceName(String dataSourceName) { this.dataSourceName = dataSourceName; } public void init() { Context initContext; try { initContext = new InitialContext(); ds = (DataSource) initContext.lookup(dataSourceName); } catch (NamingException e) { e.printStackTrace(); } } public int update(String sql, String[] param) { int result = 0; QueryRunner qr = new QueryRunner(ds); try { result = qr.update(sql, param); } catch (SQLException e) { e.printStackTrace(); } return result; } public Object query(String sql, String[] param, ResultSetHandler rsh) { QueryRunner qr = new QueryRunner(ds); Object result = null; try { result = qr.query(sql, param, rsh); } catch (SQLException e) { e.printStackTrace(); } return result; } }
在添加一些tomcat配置数据源的信息,网摘:http://www.douban.com/note/78355269/
1、修改Tomcat_Home/conf/server.xml,在GlobalNamingResources中加入:
<Resource name="jdbc/DataSource" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
username="user" password="password" maxActive="20" maxIdle="10"
maxWait="-1"/>
2、 再在Context中加入引用:
<ResourceLink name="jdbc/DataSource" global="jdbc/DataSource" type="javax.sql.DataSource"/>
如果不加,则在使用的时候会出现:Cannot create JDBC driver of class '' for connect URL 'null' 错误
3、在web.xml定义:
<resource-ref>
<description>popuserDataSource</description>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4、在Spring中引用:
<bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/DataSource"/>
<property name="expectedType" value="javax.sql.DataSource"/>
</bean>