Jdbc derby嵌入式_类非
我的主要问题是我有一个类Database.java,它访问并更新JDBCDerby数据库。使用单元测试类,Database.java通过,但使用servlet抛出异常。原因可能是什么? 以下代码可用。 我有一个程序Database.java,它是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
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);