import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Hashtable;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;public class JndiLookUp {
public static void main(String[] args) {
Context ctx = null;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 1.连接jndi服务器
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, "file:c:/jdbc");
ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("ora20");
con = ds.getConnection();
ps = con.prepareStatement("select * from m_users");
ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我已经加了ojdbc14.jar,fscontext.jar和providerutil.jar
为什么上面的代码执行完后,会出现下面的异常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.bind(InitialContext.java:400)
at JndiBind.main(JndiBind.java:29)