2012-07-17 170 views
1

我試圖連接到derby數據庫,同時使用Tomcat。我試圖通過一個servlet來做到這一點。但我無法連接和 出現以下情況例外:javax.naming.NameNotFoundException:無法連接到derby數據庫

javax.naming.NameNotFoundException: Name jdbc is not bound in this Context 
at org.apache.naming.NamingContext.lookup(NamingContext.java:803) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 
at javax.naming.InitialContext.lookup(InitialContext.java:392) 

at servlets.servlet_1.doGet(servlet_1.java:21) //---> I have marked this line in the below servlet 

at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
at java.lang.Thread.run(Thread.java:619) 

當下列servlet獲取運行:

package servlets; 

import java.io.IOException; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.servlet.http.*; 
import javax.servlet.*; 
import javax.sql.DataSource; 

public class servlet_1 extends HttpServlet{ 

@Override 
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 
    try { 
     // String queryString = request.getQueryString(); 
     Context context = new InitialContext(); 
     DataSource ds = (DataSource)context.lookup("jdbc/PollDatasource"); 
     Connection connection = ds.getConnection(); // ----> LINE 21 
     String sqlQuery = "select * from PollResult"; 
     PreparedStatement statement = connection.prepareStatement(sqlQuery); 
     ResultSet set = statement.executeQuery(); 
     System.out.println("after the final statement"); 
    }catch(Exception exc) { 
     exc.printStackTrace(); 
    } 
} 

}

爲什麼我得到這個例外?

我加入的Tomcatcontext.xml以下行:

<Resource name="jdbc/PollDatasource" auth="Container" type="javax.sql.DataSource" 
    driverClassName="org.apache.derby.jdbc.EmbeddedDriver" url="connection.url" 
    username="suhail" password="suhail" maxActive="20" maxIdle="10" maxWait="-1" /> 

及以下線路中web.xml

<resource-ref> 
<description>my connection</description> 
<res-ref-name>jdbc/PollDatasource</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 

我失去了什麼?

注:我使用NetBeans 7.1

回答

5

你必須obtain命名/環境方面:

Context initContext = new InitialContext(); 
Context envContext = (Context)initContext.lookup("java:comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/PollDatasource"); 
+0

能否請您解釋一下什麼是'環境context'是什麼意思?什麼是'java:/ comp/env'? – 2012-07-17 05:01:13

+1

它的*命名*上下文。有關詳細信息,請參閱 - http://docs.oracle.com/javaee/1.4/tutorial/doc/Resources2.html – adatapost 2012-07-17 05:06:27

+0

這也解決了我的問題。非常感謝你清除那個:) btw不需要web.xml中的信息 – d0lph1n 2013-06-25 09:58:21