我在TomCat5.5.16里配置好数据源之后在test.jsp文件写下如下代码:<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="java.sql.*" %>
<%
DataSource ds=null;
try{
    Context initCtx=new InitialContext();
    Context envCtx=(Context)initCtx.lookup("java:comp/env");
    //从context中lookup数据源
    ds=(DataSource)envCtx.lookup("MyJNDI");
    if(ds!=null){
        out.println("已经获得dataSource<br>");
        Connection conn=ds.getConnection();//获得连接
        out.println("已经获得连接");
        Statement st=conn.createStatement();
        ResultSet rs=st.executeQuery("select * from user_info");
        out.println("以下是从数据库读出的数据:<br>");
        while(rs.next()){
            out.println("userid="+rs.getString("userid")+"<br>");
            out.println("name="+rs.getString("name")+"<br>");
        }
    }else{
        out.println("连接失败");
    }
}catch(Exception es){
    out.println("test.jsp-->"+es);
}
%>运行成功,结果为:
已经获得dataSource已经获得连接 
以下是从数据库读出的数据:
userid=aaa
name=888
userid=bo
name=宇波
userid=cws
name=陈斯
userid=ddd
name=ddd
userid=ggg
name=ggg
userid=hh
name=hh
userid=xio
name=111
userid=zb
name=刘宾
userid=zj
name=李建
userid=zww
name=刘威
userid=zzz
name=zzz
userid=凯
name=张凯而基本相同的代码我在java文件里写就出错了,下面是程序:import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.*;
public class DBConnPool {
    //private String DATASOUCE="MyJNDI";
    public DBConnPool(){
    }
    public Connection getDBConnPool(){
        DataSource ds= null;
        Connection conn = null;
        try{
            Context initCtx=new InitialContext();
            Context envCtx=(Context)initCtx.lookup("java:comp/env");
            //从context中lookup数据源
            ds=(DataSource)envCtx.lookup("MyJNDI");
            if(ds!=null){
                System.out.println("已经获得dataSource<br>");
                conn=ds.getConnection();//获得连接
                System.out.println("已经获得连接");
                Statement stmt=conn.createStatement();
                ResultSet rs=stmt.executeQuery("select * from user_info");
                System.out.println("以下是从数据库读出的数据:<br>");
                while(rs.next()){
                    System.out.println("userid=" + rs.getString("userid") + "<br>");
                    System.out.println("name=" + rs.getString("name") + "<br>");
                }
            }
        }catch(Exception ex){
            System.out.println("DBConnPool()获得连接错误"+ex.getMessage());
        }finally{
        return conn;
        }
    }
    public static void main (String args[]){
    DBConnPool dbc = new DBConnPool();
    dbc.getDBConnPool();
    }}运行就出错了:
DBConnPool()获得连接错误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请问这是为什么,怎么解决???

解决方案 »

  1.   

    你前面的JSP使怎么配置的?能告知么?
      

  2.   

    你想知道我JSP里面配置的什么,能说明白点么
      

  3.   

    数据源类似与
     <Resourcename="jdbc/TestDB"
                  auth="Container"
                  type="javax.sql.DataSource"/>
      <ResourceParamsname="jdbc/TestDB">
         <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      </parameter>
         <parameter>
          <name>maxActive</name>
          <value>14</value>
         </parameter>
         <parameter>
          <name>maxIdle</name>
          <value>14</value>
        </parameter>
        <parameter>
          <name>maxWait</name>
           <value>10000</value>
        </parameter>
        <parameter>
                     <name>username</name>
           <value>test</value>
         </parameter>
                    <parameter>
                      <name>password</name>
            <value>test</value>
        </parameter>
         <parameter>
                      <name>driverClassName</name>
                       <value>oracle.jdbc.driver.OracleDriver</value>
        </parameter>    <parameter>
          <name>url</name>
          <value>jdbc:oracle:oci8:@test</value>
         </parameter>
          </ResourceParams>
        </Context>
      

  4.   

    我写了个Jsp,可以得到数据源,但的不到Connection
    <%@page contentType="text/html; charset=GB18030"%>
    <%@ page import="java.sql.*,javax.sql.DataSource,javax.naming.*" %>
    <%try{
         Context icontext=new InitialContext();
         Context context=(Context)icontext.lookup("java:comp/env");
         DataSource ds=(DataSource)context.lookup("jdbc/TestDB");  if (ds != null)
      {
        out.print("access datasource"+"<br>");
        out.print(ds);
        
         Connection con=ds.getConnection();
             PreparedStatement pStat = con.prepareStatement(
           "select userName from mystruts_tab");
        ResultSet rs = pStat.executeQuery();
       while(rs.next())
         System.out.println(rs.getString("userName"));   }
    }
    catch (Exception e)
        {
           e.printStackTrace();
         }
    %>
      

  5.   

    那当然得不到连接了,TOMCAT的连接池是由它自己的容器管理的,你从外部JAVA程序当然不能访问了。
      

  6.   

    哦........
    意思是说只能在JSP页面里访问了,是这个意思么?
      

  7.   

    tomcat提供的有相关的类,而你的java类库中可能没有相关的类,所以会出错