这个是我的程序:
package ch3;
import java.sql.*;import javax.sql.*;
import javax.naming.*;
import java.util.*;
import java.io.*;
public class JNDIPoolDemo {
public static void main(String[] args) {
String tablename = "student";
String sqlstr;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
Context ctx = null;
Hashtable ht = new Hashtable();
try
{
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
ctx = new InitialContext(ht);
DataSource ds = (DataSource)ctx.lookup("MyDataSource");
con = ds.getConnection();
stmt = con.createStatement();
sqlstr = "select * from "+tablename;
rs=stmt.executeQuery(sqlstr);
while(rs.next())
{
System.out.print(rs.getString("id"));
System.out.print("\t");
System.out.print(rs.getString("name"));
System.out.print("\t");
System.out.print(rs.getString("age"));
System.out.print("\t");
System.out.print("\n");
}

}
catch(NamingException e1)
{
System.out.println(e1.toString());
System.out.println("驱动程序没有找到!");
}
catch(SQLException e2)
{
System.out.println(e2.toString());
System.out.println("数据库异常!");
}
finally
{
try
{
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}
执行的时候发生一下错误:
Exception in thread "main" java.lang.ClassCastException: weblogic.jdbc.common.internal.ConnectionEnv
at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2209)
at weblogic.utils.io.ObjectStreamClass.writeFields(ObjectStreamClass.java:396)
at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:235)
at weblogic.corba.utils.ValueHandlerImpl.writeValueData(ValueHandlerImpl.java:225)
at weblogic.corba.utils.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:182)
at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:1913)
at weblogic.iiop.IIOPOutputStream.write_value(IIOPOutputStream.java:1948)
at weblogic.iiop.IIOPOutputStream.writeObject(IIOPOutputStream.java:2209)
at weblogic.jdbc.common.internal.RmiDataSource_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:517)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:407)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:403)
at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:56)
at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:934)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

解决方案 »

  1.   

    类型转换异常看看rs.getString是不是都是String类型的。还有DataSource ds = (DataSource)ctx.lookup("MyDataSource");测一下,看是走到那行代码抛出来了。
      

  2.   

    DataSource ds = (DataSource)ctx.lookup("MyDataSource"); 
    应该是这的问题,有可能jndi没有配置对,对象为空,然后转换的时候自然就转错了。。
      

  3.   

    debug跟踪一下,或是用System打印一下,看是哪行抛出来的ctx = new InitialContext(ht); 
    DataSource ds = (DataSource)ctx.lookup("MyDataSource"); 
    con = ds.getConnection(); 这几行多测测,看看。
      

  4.   

    con = ds.getConnection(); 把这行弄掉之后好像就没问题
      

  5.   

    java.lang.ClassCastException 强制类型转换错误  估计就是1楼和2楼说的错误了,用debug调试下看看
      

  6.   

    jndi好像也是配置对了,我在jndi结构树上看到是有的
      

  7.   

    if(ds.getConnection() instanceof java.sql.Connection) {
        System.out.println("yes, it is.");
    }
    测一下
      

  8.   

    代码是例子来的吧?先检查下代码有没有打错?特别注意sqlstr="select * from "+tableName;这句话from后面要空一格,否则会成为 fromstudent?其次在所在工程右键点击属性,在build path上加入外部jars包,weblogic.jar就可以了,我的就是显示:000099988 zhhdhh 45 有问题可以联系我:Q:385356323