2016-11-22 90 views
0

我正在Eclipse中開發一個應用程序。這是maven項目。我想使用phpMyAdmin MySqlDatabase。我在src-main-resources中創建了一個META-INF文件夾,並在該文件夾中創建了context.xml文件。這是我的context.xml文件:爲什麼控制檯給我「無法找到jdbc」

<?xml version="1.0" encoding="UTF-8"?> 
<Context reloadable="true"> 
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/database?useUnicode=true&amp;characterEncoding=utf8&amp;" 
username="root" password="" maxActive="20" maxIdle="10" maxWait="-1" /> 
</Context> 

而在SRC - 主 - java的我做了包裝,其中我做了DAO類,這是我的DAO類:

public class OsobaDAO { 
    private static String INSERTOSOBA = "INSERT INTO osoba (ime, prezime, JMBG) VALUES (?, ?, ?)"; 
    private static String DELETEOSOBA = "DELETE FROM osoba WHERE idosoba = ?"; 
    private static String SELECTBYID = "SELECT * FROM osoba WHERE idosoba = ?"; private static String GETLASTNOSOBA = "SELECT * FROM osoba ORDER BY idosoba DESC LIMIT ? "; 
    private DataSource ds; 

    public OsobaDAO(){ 
     try { 
      InitialContext cxt = new InitialContext(); 
      if (cxt == null) { 
      } 
      ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/mysql"); 
      if (ds == null) { 

      }  
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void insertOsoba(Osoba osoba){ 
     Connection con = null; 
     java.sql.PreparedStatement pstm = null; 
     try { 
      con = ds.getConnection(); 
      pstm = con.prepareStatement(INSERTOSOBA); 
      pstm.setString(1, osoba.getIme()); 
      pstm.setString(2, osoba.getPrezime()); 
      pstm.setString(3, osoba.getJMBG()); 
      pstm.execute(); 
     } catch (SQLException e) { 
      System.out.println("Error connecting!"); 
     } 
     try { 
      con.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

另外,我有一個jsp文件,其中我從DAO測試這種方法插入:

<% OsobaDAO od = new OsobaDAO(); 

Osoba o = new Osoba("Pera", "Peric", "1111111111111"); 

// poziv metode 
od.insertOsoba(o); 
%> 

當我運行程序我有這樣的錯誤:

INFO: Server startup in 5862 ms 
javax.naming.NameNotFoundException: Name [jdbc/mysql] is not bound in this Context. Unable to find [jdbc]. 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:817) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:827) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:827) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:173) 
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163) 
    at javax.naming.InitialContext.lookup(InitialContext.java:417) 
    at dao.OsobaDAO.<init>(OsobaDAO.java:25) 
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:123) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:745) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Nov 22, 2016 2:00:13 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jsp] in context with path [/DaoWithMaven] threw exception [java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
    at dao.OsobaDAO.insertOsoba(OsobaDAO.java:38) 
    at org.apache.jsp.test_jsp._jspService(test_jsp.java:128) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:745) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

任何人都可以幫助我嗎?

+0

嘗試cxt.lookup(的 「java:JDBC/MySQL的」); –

+0

不,再次相同... – Atenica

+0

你有沒有添加MySQLDatabase連接器在你的lib.Please檢查它。如果沒有然後添加數據庫連接器jar在你的lib – Zia

回答

0

假設你將應用程序部署爲war文件,你可以添加一個名爲application.xml中的XML文件到以下目錄:

$ CATALINA_BASE/conf目錄/卡塔利娜/本地主機/ application.xml中

在這個文件中,你可以配置你的數據庫,如下所示:

<?xml version="1.0" encoding="UTF-8"?><Context path="/application"><Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" 
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/database?autoReconnect=true" username="root" password="test" maxActive="20" maxIdle="10" maxWait="-1" /> </Context> 

只有這個配置,application.war才能使用這個池。如果你希望在服務器範圍內使用池,你應該在server.xml中配置它。

0

也許這是你的問題:

In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application's META-INF directory.

(報價從tomcat.apache.org

+0

那麼,我該怎麼做呢? – Atenica

+0

在你的'$ CATALINA_BASE/conf/...'目錄下看看,如果還有一個/更老的'context.xml',那麼刪除它並在之後再試一次(**備份你刪除的context.xml! **)或者可能打印出此文件的內容 - 也許還有另一個資源定義。 –

相關問題