有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自Servlet的java mysql jdbc查询(tomcat服务器)

我对我的一个小代码感到困惑

我编写了一个函数,它在mySQL数据库上执行查询并以字符串形式返回内容。 我有一个用于测试的类

public static void main(String[] args) {    
    System.out.println(funct());
}
public static String funct(){
    DBOps dbops=new DBOps();
    String s=(dbops.read("select * from db.table"));
    return s;
}

执行main()可以非常好地工作并返回所需的字符串 但是,如果我想在Servlet中执行funkt(),就会遇到麻烦

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println(HTML_START + "<h2>Hello!</h2><br></br><h2> " + Test.funct() + " </h2>" +HTML_END);
}

Servlet在tomcat服务器上执行。 Tomcat启动得很好。 从出现的错误来看,这似乎是某种JDBC问题,什么不应该是可能的,因为JDBC在Servlet中未执行funct()时运行良好。 这是包含jdbc操作的部分:

String url="jdbc:mysql://localhost:3306/db"; 
String username ="root";
String password ="pass";

private ResultSet getDB(String q){ //q is the input query
    try {
          Class.forName("com.mysql.jdbc.Driver");
          connect = DriverManager.getConnection(url, username, password);
          statement = connect.createStatement();
          resultSet = statement.executeQuery(q);
          System.out.println(writeResults(resultSet));
     }

然后我得到了这些错误:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at mainPackage.DBOps.getDB(DBOps.java:27)
at mainPackage.DBOps.read(DBOps.java:144)
at mainPackage.Test.funct(Test.java:18)
at mainPackage.Main.doGet(Main.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Mär 05, 2015 12:06:59 AM org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet [mainPackage.Main] in context with path [/NozPrototyp01] threw exception
java.lang.NullPointerException
at mainPackage.DBOps.writeResults(DBOps.java:105)
at mainPackage.DBOps.read(DBOps.java:144)
at mainPackage.Test.funct(Test.java:18)
at mainPackage.Main.doGet(Main.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

我真的希望有人能帮助我,因为我在这里会有点沮丧><


共 (1) 个答案

  1. # 1 楼答案

    您必须下载mysql connector(mysql java驱动程序)并将其添加到tomcat的lib目录中,或者在项目类路径中提供这个jar(应该与webapplication一起部署)。如果您使用的是maven,您可以在项目中将其声明为依赖项。在本例中,选中this