关于在servlet中调用自建的数据库访问类时,
抛出异常的问题。在线等
我在一个servlet中调用了自建的数据库访问类中的方法,抛出了一个
ClassNotFoundException.
具体如下:
这是控制台追踪异常的结果,显示如下。
信息:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.haiersoft.db.DBOper.getConn(DBOper.java:20)
at com.haier.handler.RegistServlet.doPost(RegistServlet.java:47)
…………
at java.lang.Thread.run(Unknown Source)
从结果上看,似乎是没加载mysql的驱动类,可我确实加载了。为了证明,我又编写了一个测试类test.java 代码如下:
public class test
{
public static void main(String[] args) throws Exception
{
DBOper db = new DBOper();//DBOper就是我建的数据库访问类
String server = "localhost";
String dbname = "haier";
String user = "root";
String pwd = "123456";
if(db.getConn(server,dbname,user,pwd) != null)
{
System.out.println("link succeed");
}
}
}
运行的结果是:link succeed
它意味着确实是可以连接上数据库的,自建的数据库访问类中的访问数据库的方法是管用的。数据的驱动确实加载了,并且是可以找到那个com.mysql.jdbc.Driver类的。可是为什么在servlet中调用访问数据库的方法是却抛出了异常呢?求各位高手帮忙解决,不胜感激。
再附上那个自建的数据库访问类中的访问数据库的方法的代码:
public Connection getConn(String server,String dbname,String user,String pwd) throws Exception
{
String DRIVER = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://"+server+":3306/"+dbname+"?user="+user+"&password="+pwd;
Class.forName(DRIVER).newInstance();
conn = DriverManager.getConnection(URL);
return conn;
}
------解决方案--------------------把mysql驱动的.jar文件,拷到WEB-INF/lib目录下
------解决方案--------------------
web项目要把jar文件拷贝到lib目录下,不能引用本地jar文件的路径,因为部署到服务器上就找不到这些路径了!~
------解决方案--------------------把jar文件拷贝到lib目录下 然后build path
------解决方案--------------------拷贝到tomcat/lib下
------解决方案--------------------com.mysql.jdbc.Driver 很明显驱动没有加到classpath中,如果添加了,那就看看你的驱动包,展开JAR文件看看com.mysql.jdbc.Driver在这个路径下有无这个类,有肯能是你的驱动包有问题。
------解决方案--------------------Java code
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection(
"jdbc:mysql://localhost:3306/dbname,
"root", "pwd");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
测试类:
public static void main(String[] args) {
System.out.println(getConnection());
}
------解决方案--------------------
很明显的包没加进去
WEB-INF/lib下要有
tomcat/lib下也要有(我自己做的时候从来不管这里- -!其实原因我也不搞不清楚,反正每次把包复制到WEB-INF/lib下就OK了)
------解决方案--------------------
问题解决?