public static void main(String[] args) {

String sql = "select * from test";
try {
Context context = new InitialContext();
DataSource datasource= (DataSource)context.lookup("java:/comp/env/dds");
Connection conn = datasource.getConnection();
PreparedStatement pst = conn.prepareStatement(sql);
ResultSet rs =(ResultSet) pst.executeQuery();
while(rs.next()) {
System.out.print("username:"+rs.getString(1)+"\t");
System.out.println("password:"+rs.getString(2));
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

}
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 com.lisu.myjdbc.DbUtilsTest4.main(DbUtilsTest4.java:21)

解决方案 »

  1.   

    这是配置
    <Context reloadable="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Resource name="dds" auth="Container" type="javax.sql.DataSource" 
    maxActive="100" maxIdle="20" maxWait="10000" username="scott" password="tiger"
    driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@www-f6ac4c1d6dc.:1521:orc10"/>
    </Context>麻烦了
      

  2.   

    你的代码,是在一个Web服务器里才能运行的,不是在main里的。
      

  3.   

    main方法是用的jdk起了一个jvm
    而数据源是配置你的中间件的jvm中,两个jvm不是一码事,你在main中new的context肯定找不到了,使用远程方式call吧
      

  4.   

    把service runtime 加到你的 main的java项目中的build path就能jndi lookup了
      

  5.   


    错误是JNDI的问题
    如果是main的话需要把JNDI相关的包引过来. 你用的什么服务器
    JBOSS?WEBSPHERE?如果你用的JBoss的话,把
    $jboss_home/client下的lib引到工程下(当然不是全部需要)就可以了.其他服务器的话就去他的lib目录找吧..