java - 使用 NuoDB 编写 servlet

标签 java servlets nuodb

我是使用 NuoDB 的新手。我的任务是重做我的 servlet-application 以使其可以使用 NuoDB 数据库。 所以,这是我的新 doGet servlet 方法:

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)

如何解决?

最佳答案

问题是 NuoDB JDBC jar 不在你的类路径中。

NuoDB documentation声明它位于安装 NuoDB 的目录下,在名为 jar 的子目录下。

您必须将该位置添加到您的 Web 应用程序类路径(假设您的 tomcat 与您的数据库位于同一台机器上),或者将 jar 与所有其他 jar 一起复制到 tomcat 能够找到它的位置你正在使用。

关于java - 使用 NuoDB 编写 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676951/

相关文章:

java - 评估 boolean 字符串表达式?

java - 将 .Java 文件转换为 .Smali 文件

java - 通过 Spring 根据请求填充集合?

java - 如何将 Java Servlet 与 Play 框架 Web 套接字混合?

sql - 如何使用 NuoDB 在 Ruby On Rails 中手动执行 SQL 命令

java - 来自 Java 的具有多级参数的 NuoDB 存储过程调用

java - 无法从 CMSSigned 数据获取 SignerCertificate

javascript - 编写一个与 JMS (ActiveMQ) 对话的 Servlet 和 OnMessage 更新站点

java - Spring Batch应用程序sqlcode -4499 sqlstate 08001

java - 项目中包含jar。并包括Android Library项目