2016-11-22 95 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! **)或者可能打印出此文件的内容 - 也许还有另一个资源定义。 –

相关问题