運行環境:tomcate7.0 IDE:myeclipse2017 jdk:1.8 spring依賴jar ojdbc14.jar
1.在tomcat目錄下conf/context.xml文件中 加入以下代碼
<Resource name="jdbc/orcl"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORCL"
username="zhangsan"
password="zs123"
maxActive="100"
maxIdle="30"
maxWait="10000" />
2.在spring的配置文件applicationcontext.xml文件里面配置
<!-- JNDI -->
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jdbc/orcl">
</property>
3.寫測試類打印出數據源的連接對象
main{
Context context = new InitialContext();
DataSource dSource =(DataSource) context.lookup("java:comp/env/jdbc/orcl");
Connection connection = dSource.getConnection();
System.out.println(connection);
connection.close();
}
打印連接對象然后測試一直報錯:
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.lookup(InitialContext.java:392) 后來看到論壇里的回復才知道原因在用JNDI連接數據庫時用main函數測試時總報錯,InitialContext 是要在應用服務器的上下文里才有的。你在普通的應用程序里怎么行!放到tomcat里面運行看看吧!
不能用main函數直接測試,只能放到tomcat或者servlet、jsp顯示
jsp里面這樣寫:
<%
Context context = new InitialContext();
DataSource dSource =(DataSource) context.lookup("java:comp/env/jdbc/orcl");
Connection connection = dSource.getConnection();
System.out.println("連接對象在console顯示:"+connection);
out.println("連接對象在jsp顯示:"+connection);
connection.close();
%>
我這樣寫問題解決了
連接對象在console顯示:jdbc:oracle:thin:@localhost:1521:ORCL, UserName=ZHANGSAN, Oracle JDBC driver
注意要加ojdbc14.jar到項目中,在這里浪費了很多時間,特此標記一下。