首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >derby embedded_ClassNot

derby embedded_ClassNot
EN

Stack Overflow用户
提问于 2012-05-25 19:55:40
回答 1查看 371关注 0票数 0

我的主要问题是我有一个类Database.java,它访问和更新JDBC Derby数据库。使用单元测试类,Database.java可以通过,但使用servlet会抛出异常。可能的原因是什么?下面的代码是可用的。我有一个程序Database.java,它是

代码语言:javascript
复制
package com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;


public class Database {

    Connection connection = null;

    String URL;
    String DRIVER;
    PreparedStatement updateVotes, totalVotes, results; 

    private static Database unique;

    private Database()
    {
        URL = "jdbc:derby:C:\\Documents and Settings\\tr1b4361\\Voting";
        DRIVER =  "org.apache.derby.jdbc.EmbeddedDriver";

        try {   

            Class.forName("DRIVER").newInstance();
            connection = DriverManager.getConnection(URL);          

        } catch (SQLException e) {

            e.printStackTrace();
        }
        catch (InstantiationException e) {

            e.printStackTrace();
        } catch (IllegalAccessException e) {

            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {

            e.printStackTrace();
        }
    }

    public static Database getInstance()
    {
        if(unique == null)
        {
            unique = new Database();
        }

        return unique;
    }

    ....
}

我为类DatabaseTest编写了一个单元测试,它成功地测试和验证了数据库类

代码语言:javascript
复制
package test;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runners.Parameterized.Parameters;

import com.Database;
import com.Vote;
import com.voting.Voter;


public class DatabaseTest {


//  @Test
//  public void testUpdateVotes() {
//      
//      Database database = new Database();
//      
//      assertEquals("equal", 1, database.updateVotes("BIRD"));
//      assertEquals("eqaul", 1, database.updateVotes("BIRD"));
//  }

    @Test
    public void testSumVotes() {
        Database database = Database.getInstance();

        assertEquals("equal", 9, database.sumVotes());

    }

    @Test
    public void testGetTable() {
        Database database = Database.getInstance();
        List<Vote> l = database.getTable(); 

        Iterator<Vote> i = l.iterator();


        while(i.hasNext())
        {
            Vote v = i.next();
            System.out.println(v.animal + ": " + v.vote);
        }

        List<Vote> l2 = new ArrayList<Vote>();
        l2.add(new Vote("BIRD", 4));
        l2.add(new Vote("CAT", 5));
        l2.add(new Vote("DOG", 0));
        l2.add(new Vote("NONE", 0));
        l2.add(new Vote("SNAKE", 0));

        assertEquals("equal", l.get(0).animal, l2.get(0).animal);
        assertEquals("equal", l.get(1).animal, l2.get(1).animal);
        assertEquals("equal", l.get(2).animal, l2.get(2).animal);
        assertEquals("equal", l.get(3).animal, l2.get(3).animal);
        assertEquals("equal", l.get(4).animal, l2.get(4).animal);


    }

}

但是当从servlet表决器调用数据库实例时,它会给出ClassNotFoundException

代码语言:javascript
复制
java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.Database.<init>(Database.java:31)
    at com.Database.getInstance(Database.java:55)
    at com.voting.Voter.doPost(Voter.java:77)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
May 25, 2012 11:08:17 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.voting.Voter] in context with path [/Ch9_Fig9_27] threw exception
java.lang.NullPointerException

servlet Voter.java的代码

代码语言:javascript
复制
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        database = Database.getInstance();
//      Database2 database= new Database2();
        String animalName = (String) request.getAttribute("animal");
        database.updateVotes(animalName);

//      RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
//      rd.forward(request, response);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-26 07:48:42

您需要使servlet能够访问derby.jar。根据您的应用程序服务器的不同,有多种方法可以做到这一点。如果要构建一个.war文件,最简单的方法是在war文件的WEB-INF/lib子目录中包含derby.jar。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10753985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档