tomcat+sql 2000连接池入门小问题

roger_lmj 2009-07-30 08:11:33
这几天在搞连接池遇到个问题请教一下大家

我在jsp里写:获取连接并打印相关成功取得信息,测试成功能取得和连接池相关测试都没问题;

但我想把Java代码即从连接池里取连接,从jsp中给提取出来放到Javabean等中那要用连接给它就OK,实现jsp只管显示而不负
责其他,结果出问题:
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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at lmj.zdsoft.efforts.db.pool.Conn.getConText(Conn.java:33)
at lmj.zdsoft.efforts.db.pool.Conn.main(Conn.java:52)

我的Java代码为:
public class Conn {

static Connection conn = null;
synchronized public static void getConText() throws SQLException {
try {
Context ic = new InitialContext();
Context cont = (Context)ic.lookup("java:comp/env");
DataSource dataSource = (DataSource)cont.lookup("jdbc/text");
conn = dataSource.getConnection();
if(conn!=null){
System.out.print("YES");
System.out.print(conn.toString());
conn.close();
}else{
System.out.print("NO");
}

} catch (NamingException e) {
e.printStackTrace();
}
// return conn;
}

public static void main(String[] s) {
try {
getConText();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

xml配置为:放在Tomcat 6.0\conf\Catalina\localhost目录下
<Context path= "/DBPool" docBase= "${catalina.home}/webapps/DBPool"
debug= "0" reloadable= "true " crossContext= "true ">
<Resource name="jdbc/text"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=studentManage"
username="sa"
password="8123146"
maxActive="900"
maxIdle="1"
maxWait="10"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
removeAbandoned="true" removeAbandonedTimeout="1" logAbandoned="true"
/>
</Context>

只要实现Java代码与从jsp里分离,专门一个类来实现连接池;给个完整的代码我参考也行
分不够我再加
小弟先谢谢大家了
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_lmj 2009-08-01
  • 打赏
  • 举报
回复
唉,结了;自己写了个连接池没用tomcat
还是谢谢了
roger_lmj 2009-08-01
  • 打赏
  • 举报
回复
JDBC 驱动已经放在 Tomcat/lib 目录内
我已经放了
roger_lmj 2009-08-01
  • 打赏
  • 举报
回复
2楼:
我是在Tomcat 6.0\conf\Catalina\localhost
自己在conf下建的Catalina\localhost专门用于存放配置而没在 META-INF/context.xml 下配置;用我那种在Catalina\localhost配置除我配置的那些外还需要配置那些才可以连接上

对了我在jsp里测试时没配置
WEB-INF/web.xml

<resource-ref>
<description>DB Connection </description>
<res-ref-name>jdbc/msjdbc </res-ref-name>
<res-type>javax.sql.DataSource </res-type>
<res-auth>Container </res-auth>
</resource-ref>
都可以
咋换成在Java中时要配置那
我不咋明白谢谢
xuexijava 2009-07-31
  • 打赏
  • 举报
回复
UP
jinchun1234 2009-07-31
  • 打赏
  • 举报
回复
http://blog.csdn.net/jinchun1234/archive/2009/06/21/4286276.aspx
___NULL 2009-07-31
  • 打赏
  • 举报
回复
首先确保 MS JDBC 驱动已经放在 Tomcat/lib 目录内

编辑 web 应用中的目录 META-INF/context.xml 文件

貌似你的 ClassName 和我写的不一样,
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/DBPool" URIEncoding="UTF-8">
<Resource
description="DB Connection"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
maxActive="500"
maxIdle="30"
maxWait="10000"
name="jdbc/msjdbc"
auth="Container"
type="javax.sql.DataSource"
username="sa"
password="8123146"
url="jdbc:sqlserver://localhost:1433;databaseName=studentManage"
/>
</Context>

编辑 web 应用中的目录 WEB-INF/web.xml

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

连接代码

import java.sql.*;
import javax.sql.*;

...

...

Connection con;
Statement stmt;
ResultSet rs;

try
{
// 连接数据库
Context ctx = new InitialContext ();


// 以下两种连接方式根据连接MySQL还是SQLSERVER来决定采用


DataSource ds = (DataSource) ctx.lookup ("java:comp/env/jdbc/msjdbc"); // SQLSERVER 使用


con = ds.getConnection ();
// 创建 JDBC 申明
stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

try
{

// SQL 命令构建

String SqlCmdText = "select * from message_text";

// 执行SQL命令

rs = stmt.executeQuery (sqlCmdSelect);

// 遍历所有记录

where ( rs.next()

{

String OutText = rs.getString("fieldname");

......

......
}

// 资源释放
if ( rs != null )
{
rs.close ();
}


}
catch (Exception e)
{
}

// 资源释放

if (stmt != null)
{
stmt.close ();
}
if (con != null)
{
con.close ();
}
}
catch (Exception e)
{
}


------

也可以看我的 Blog 上的 JavaEE 的文章 http://blog.csdn.net/joyous
roger_lmj 2009-07-30
  • 打赏
  • 举报
回复
帮帮忙嘛,大哥大姐些
分步够我再加谢谢了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧