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
tomcat下context.xml中的配置如下:
Java code?1234 <Resource name="jdbc/oraldb" auth="Container" type="javax.sql.DataSource" axActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger"riverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:orcl"/>
web.xml中配置如下:
Java code?123456 <resource-ref> <res-ref-name>jdbc/oraldb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
获得数据库连接的代码如下:
Java code?123456789101112 public Connection getConnection(){ try{ Context cxt=new InitialContext(); DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/oraldb"); conn=ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } return conn; }
测试代码如下:
Java code?12 Connection conn=DBHelper.getInstance().getConnection(); System.out.println(conn);
错误信息: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;
问题不用细说了吧,求助!
没有初始化上下文错误:需要指明ClassName
不知道是不是你少打了一个字母 dirverClassName少了一个d
这种方式必须要tomcat启动的情况下才能得到Connection,
另外它有三个缺点:
1,不能直接在main方法中运行,也就不能测试,很不方便!
2,不能正常读写Oracle的clob字段,会导致很多功能做不了!
3,效率不及dbcp或c3p0,其实后两者也都实现了javax.sql.DataSource接口,可以算是它的扩展版,可以在本工程中配置,可以在main方法中运行