tomcat6.0如何配置数据库连接池

小鸟向前飞 2010-10-09 09:46:59
报错如下:


javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at common.sqlHelper.DBTools.getConn(DBTools.java:22)
at common.sqlHelper.DBTools.main(DBTools.java:74)




我的代码如下:


/**
* 创建数据库连接池
*/
package common.sqlHelper;

import java.sql.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBTools {

private Connection conn;
private ResultSet rs;
private PreparedStatement ps;
private DataSource ds;

public Connection getConn() {

try {
Context ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/oracle");
if(ds != null)
{
conn = ds.getConnection();
}
} catch (Exception e) {
System.out.println("异常时手动连接数据库");
e.printStackTrace();
// 异常时手动连接数据库
String url = "jdbc:oracle:thin:@localhost:1521:ORA9I";
String name = "scott";
String passwd = "tiger";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, name, passwd);
} catch (Exception e2) {
// TODO: handle exception
e.printStackTrace();
}
}
return conn;
}

public void close()
{
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
DBTools d = new DBTools();
d.getConn();
}
}



tomcat的server.xml中:


……
-->
</Host>
</Engine>
</Service>
<!--
<context path="/TestLogin" doBase="E:\workspace2\WorkSpace\WorkSpace\TestLogin\WebRoot"
reloadable="true" workDir="E:\workspace2\WorkSpace\WorkSpace\TestLogin\work">
-->
<Resource name="oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORA9I"
username="scott"
password="tiger"
maxActive="100"
maxIdle="20"
maxWait="2000"
/>
<!--
</context>
-->
</Server>


web.xml中:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/oracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>




在网上查了查 好像没什么错误 求助了
...全文
331 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
宁波朱超 2010-10-13
[Quote=引用 12 楼 superdcj 的回复:]

都没有说到重点,XML code
<Resource name="oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@lo……
[/Quote]

我 10 楼 就说过了没人注意么?
配置这个 还配置什么WEB.XML干啥 多此一举么
回复
覆水难收 2010-10-13
还有你web xml应该是 ..oracle 不应该是jdbc/oracle 把前面的去掉就好了.
回复
覆水难收 2010-10-13
我按照你的配置的 没有问题...但是我给你提一个建议..在context.xml里面貌似有空格...我希望你能删掉.
回复
小鸟向前飞 2010-10-12
回复
precious 2010-10-12
如果你用的tomcat6.* 用楼上的方法改 同时还要把web.xml修改一下
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/oracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

这个改成<res-ref-name>oracle</res-ref-name>
回复
superdcj 2010-10-12
都没有说到重点,
<Resource name="oracle" 
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORA9I"
username="scott"
password="tiger"
maxActive="100"
maxIdle="20"
maxWait="2000"
/>
这段代码应该在CONF目录下的context.xml配置,而不是在server.xml中
回复
cw_tkong 2010-10-12
可以用 proxool 链接数据库
相关文件去Google
回复
宁波朱超 2010-10-12
CONF目录下的context.xml配置
回复
zhangliang_88 2010-10-12
在web.xml中加入:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/dxlbs</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
回复
zhangliang_88 2010-10-12
java部分代码 取数据源:
//初始化查找命名空间
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/dxlbs");
//取出连接
conn = ds.getConnection();
回复
zhangliang_88 2010-10-12
我用的是jdni数据源
在应用的META-INF里建context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/dxlbs"
auth="Container"
type="javax.sql.DataSource"
maxActive="1000"
maxIdle="300"
maxWait="10000"
username="SHDX"
password="SHDX"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@255.255.1.82:1521:shdx"/>
</Context>
回复
zjygzdfazq 2010-10-10
你做的多大的程序非得用连接池了??
回复
wuxiaoke2009 2010-10-10
我也学习 学习~~~
回复
小鸟向前飞 2010-10-10
[Quote=引用 3 楼 zjygzdfazq 的回复:]
你做的多大的程序非得用连接池了??
[/Quote]
不大啊 就像用这个写写
回复
小鸟向前飞 2010-10-09
问题依旧……
回复
qq38396025 2010-10-09
好久没自己处理连接池了,现在都交给框架处理了!帮顶下吧

粗粗扫了一眼,

<Resource name="oracle"

试下

<Resource name="jdbc/oracle"

不知道有没有记错哦
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-09 09:46
社区公告
暂无公告