【问题标题】:Why console gives me "Unable to find jdbc"为什么控制台给我“无法找到 jdbc”
【发布时间】:2017-04-06 04:15:06
【问题描述】:

我正在 Eclipse 中开发一个应用程序。那是maven项目。我想使用 phpMyAdmin MySqlDatabase。我在 src-main-resources 中创建了一个 META-INF 文件夹,并在该文件夹中创建了 context.xml 文件。这是我的 context.xml 文件:

    <?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-main-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)

谁能帮帮我?

【问题讨论】:

  • 试试 cxt.lookup("java:jdbc/mysql");
  • 不,还是一样...
  • 您是否在您的库中添加了 MySQLDatabase 连接器。请检查它。如果没有,则在您的库中添加数据库连接器 jar
  • 我在tomcat lib、JDK lib和maven依赖中添加了mysql连接器。

标签: java mysql eclipse maven jdbc


【解决方案1】:

也许这是你的问题:

在 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录中的单个文件(带有“.xml”扩展名)中。上下文路径和版本将从文件的基本名称(文件名减去 .xml 扩展名)派生。 此文件将始终优先于打包在 Web 应用程序的 META-INF 目录中的任何 context.xml 文件。

(引用自tomcat.apache.org

【讨论】:

  • 那么,我该怎么办?
  • 请查看您的$CATALINA_BASE/conf/... 目录,如果有其他/较旧的context.xml,则将其删除并稍后再试一次(备份您已删除的 context.xml!) 或者在这里打印出这个文件的内容——也许你的资源有另一个定义。
【解决方案2】:

假设您将应用程序部署为 war 文件,您可以将名为 application.xml 的 XML 文件添加到以下目录:

$CATALINA_BASE/conf/Catalina/localhost/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 中配置它。

【讨论】:

    【解决方案3】:

    @Atletica 使用此链接将有很大帮助,如果答案正常,请投票https://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

    【讨论】:

    • 假设您的应用程序是基于 Web 的?
    • 如果需要在web.xml中添加一些配置
    • 是的,它是 maven 项目,但基于网络
    • 那个 tomcat 配置文件在哪里?
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多