2014-10-31 2 views
3

Я новичок в использовании NuoDB. У меня есть задача переделать мой servlet-application, он может использовать базу данных NuoDB. Итак, это мой новый метод doGet сервлет:Написание сервлета с использованием NuoDB

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    //doPost(request, response); 
    String outPage = "<h1>Output:</h1><br>"; 
    List<Info> list_cars = new ArrayList<Info>(); 

    try 
    { 
     //DriverManager.registerDriver(new com.nuodb.jdbc.Driver()); 
     Class.forName("com.nuodb.jdbc.Driver"); 
     DBWorker db = new DBWorker("dba", "goalie", "cars"); 
     list_cars = db.getUser(); 

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

    for (int i = 0; i < list_cars.size(); i++) 
    { 
     outPage += "Car name: " + list_cars.get(i).getCarName() + "<br>"; 
     outPage += "Car color" + list_cars.get(i).getCarColor() + "<br>"; 
     outPage += "Car size: " + list_cars.get(i).getCarSize().toString() + "<br>"; 
     outPage += "Car release: " + list_cars.get(i).getCarRelease().toString() + "<br>";    
     outPage += "-------------<br>"; 
    } 

    Map<String, String> map = new HashMap<String, String>(); 
    map.put("data", outPage); 
    PrintWriter out = response.getWriter(); 

    String res = Templater.view("results", map); 
    out.println(res);     
} 

Это мой класс, который работает с базой данных:

public class DBWorker 
{ 
    /** 
    * The driver class provided by NuoDB. 
    */ 
    public static final String DRIVER_CLASS = "com.nuodb.jdbc.Driver"; 
    /** 
    * The base URL for connecting to a local database server. 
    */ 
    public static final String DATABASE_URL = 
      "jdbc:com.nuodb://localhost:8080/"; 
    // the established connection to a local server 
    private Connection dbConnection; 

    public DBWorker(String user, String password, String dbName) throws SQLException 
    { 
     Properties properties = new Properties(); 
     properties.put("user", user); 
     properties.put("password", password); 
     properties.put("schema", "HOCKEY"); 
     dbConnection = DriverManager.getConnection(DATABASE_URL + dbName, properties); 
    } 

    public void insertUser(String name, String color, Integer size, Date release) throws SQLException 
    { 
     PreparedStatement stmt = dbConnection.prepareStatement("insert into CARS (CAR_NAME, CAR_COLOR, CAR_SIZE, CAR_RELEASE) values (?, ?, ?, ?)"); 

     try 
     { 
      stmt.setString(1, name); 
      stmt.setString(2, color); 
      stmt.setInt(3, size); 
      stmt.setDate(4, new java.sql.Date(release.getTime())); 
      stmt.addBatch(); 
      stmt.executeBatch(); 
     } 
     catch (Exception exception) 
     { 
      System.out.println("Skipping insert..."); 
     } 

     dbConnection.commit(); 
    } 

    public List<Info> getUser() throws SQLException 
    { 

     Statement stmt = dbConnection.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM CARS"); 
     List<Info> users = new ArrayList<Info>(); 

     try 
     { 
      while (rs.next()) 
      { 
       users.add(new Info(rs.getString(2), rs.getString(3), rs.getInt(4), new Date(rs.getDate(5).getTime()))); 
      } 
     } 
     finally 
     { 
      rs.close(); 
      stmt.close(); 
     } 
     return users; 
    } 
} 

Моя проблема в я не могу читать и писать в ничего базы данных. Ошибки в консоли:

java.lang.ClassNotFoundException: com.nuodb.jdbc.Driver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at testPackage.CarServlet.doGet(CarServlet.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

Как это исправить?

+0

Необходимо, чтобы эта библиотека была доступна при запуске приложения, как и для любого другого JAR. –

ответ

2

Проблема в том, что банкомат NuoDB JDBC не находится в вашем пути к классу.

NuoDB documentation указывает, что он находится в каталоге, где установлен NuoDB, под подкаталогом с именем jar.

Вы должны либо добавить это местоположение в свой путь к вашему веб-приложению (если ваш tomcat находится на том же компьютере, что и ваша база данных), либо скопировать банку туда, где tomcat сможет ее найти, вместе со всеми другими банки, которые вы используете.

Смежные вопросы