黑马程序员技术交流社区

标题: Tomcat数据源 数据库连接池 问题 [打印本页]

作者: 马亚冲    时间: 2011-8-28 08:40
标题: Tomcat数据源 数据库连接池 问题
[code=jscript]<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*"%>

<%
         String DSNAME="java:comp/env/jdbc/mydatabase" ;
                Context ctx = new InitialContext() ;
                DataSource ds = (DataSource) ctx.lookup(DSNAME);
                Connection conn = ds.getConnection() ;
       
%>
<%=conn%>
连接成功并关闭
<%
        conn.close() ;//将连接放回池中
%>[/code]Tomcat安装目录下的server.xml和web-inf下的web.xml都正确配置了,而且这个jsp页面正常输出了conn连接的路径
但是下面的:[code=java]package sjy.xg.myc.datasource;

import java.sql.*;//Connection
import javax.sql.*;//DataSource
import javax.naming.*;//Context
public class DatabaseConnection{
        private Connection conn = null ;
        private String DSNAME="java:comp/env/jdbc/mydatabase" ;
        public DatabaseConnection() throws Exception{
                Context ctx = new InitialContext() ;
                DataSource ds = (DataSource) ctx.lookup(DSNAME);
                this.conn = ds.getConnection() ;
        }
       
        public Connection getConnection(){
                return this.conn ;
        }
       
        public void close() throws Exception {
                if(this.conn != null){
                        try{
                                conn.close() ;
                        }catch(Exception e){
                                throw e ;
                        }       
                }
        }

        public static void main(String[] args) throws Exception{
           Connection conn = new DatabaseConnection().getConnection();
            System.out.println("sucess"+conn);
        }
       
}[/code]老出现错误:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in env
ironment or system property, or as an applet parameter, or in an application resource file:  java.na
ming.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 sjy.xg.myc.datasource.DatabaseConnection.<init>(DatabaseConnection.java:11)
        at sjy.xg.myc.datasource.DatabaseConnection.main(DatabaseConnection.java:30)

怎么解决?????
作者: 匿名    时间: 2011-8-28 09:18
你是否将已将数据库驱动程序拷贝到%TOMCAT_HOME%\common\lib文件夹下,如果已拷贝的话那就是配置有问题了。看我写的那篇[url]http://dong-dong.iteye.com/blog/993408[/url]
作者: 匿名    时间: 2011-8-28 11:24
标题: 回复 沙发 的帖子
jsp的运行并正确输出,就说明我的配置没问题吧

为什么第二个java程序就报错呢????
作者: 匿名    时间: 2011-8-28 11:26
标题: 回复 沙发 的帖子
[b]我看了你的那个,我是也这样配置的啊
可是就是jsp正确,java类的就不对了
要不你把你的jsp代码用java类的形式实现下,看看报错不??[/b]
作者: 匿名    时间: 2011-8-28 22:46
[code]<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@ page import="sjy.xg.myc.datasource.*"%>
<%@ page import="java.sql.*"%>
<%
        Connection conn = new DatabaseConnection().getConnection() ;
%>
<%=conn %>[/code]成功了,我明白这句话的意思了“此程序只能在WEB下运行,而不能使用Application程序运行”
,就是不鞥单独测试这个类,而要使它在web容器了运行。而使它在web容器里运行的方法就是放在jsp中了。这也是它的有用的地方了。

谢谢楼上的帮助了 谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2