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

mysql jdbc Query from a Servlet (tomcat server)

我对我的一些代码感到困惑。

我写了一个函数,它在 mySQL 数据库上执行查询,returns 内容作为字符串。 我有一个 Class 用于测试目的。

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() 工作得很好并且 returns 想要的字符串 但是,如果我想在 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 问题,这是不可能的,因为当 funct() 未在 Servlet 中执行时,JDBC 运行正常。 这是其中包含 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)

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

您必须下载并添加 mysql connector (mysql driver for java) to your tomcat's lib directory or provide this jar within your projects classpath (and should be deployed with the webapplication). If you're using maven you could declare it as dependency within your project. In this case check this