日期:2014-05-20  浏览次数:20874 次

关于在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了)
------解决方案--------------------
问题解决?