Jdbc derby嵌入式_类非

Jdbc derby嵌入式_类非,jdbc,derby,Jdbc,Derby,我的主要问题是我有一个类Database.java,它访问并更新JDBCDerby数据库。使用单元测试类,Database.java通过,但使用servlet抛出异常。原因可能是什么? 以下代码可用。 我有一个程序Database.java,它是 package com; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Re

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

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编写了一个单元测试,它成功地测试和验证了数据库类

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

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
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);