无法通过servlet连接到mysql
我花了两天时间试图找出为什么我的servlet没有连接到MySQL数据库。
我安装了MySQL并正常工作和Eclipse。
每当我尝试建立连接时,我都会获得com.mysql.jdbc.Driver
的ClassNotFoundException
,它实际上是正确导入的。 我正在使用的连接器是作为外部jar正确添加的mysql-connector-java5.1.14
,所以一切似乎都很好。 这是我的代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String dbUrl="jdbc:mysql://localhost:3306/test"; String username="root"; String password=""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn=DriverManager.getConnection(dbUrl); System.out.println("Connected!"); } catch (SQLException e) { e.printStackTrace(); System.out.println("not connected"); } catch(ClassNotFoundException x){ x.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } }
这是堆栈跟踪的一部分:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:164)
我正在遵循已发布的Java书中的连接步骤。 在论坛和教程中,我只看到相同的代码,无法弄清楚为什么会抛出exception。
在不在服务器上运行的普通应用程序上,不会抛出exception并且连接(以完全相同的方式)成功。
你有什么建议吗?
两种可能的方案:
1)当你创建WAR时,那里面有那个驱动程序吗? 你可以解压缩它(将.war文件重命名为.zip并只看一下 – 它应该在/ WEB-INF / lib下。)Eclipse可能没有将它导出到WAR。
2)如果您使用Tomcat,是否将它放入Tomcat lib目录? 如果没有,您部署到哪个servlet容器?
我注意到的一件事是,有时候,Java并不喜欢有类空间。 您应该能够通过将其包含在两个解决方案中的任何一个中来避免它,因此它成为相对路径,但您可以尝试消除空间并查看它是否有帮助。
将mysql-connector-x.jar
放在WEB-INF/lib