mardi 25 avril 2017

Creating h2 database in java servlet

I am attempting to create a h2 table 'USERINFO' within a java servlet. This will contain a username and a password which will be user later for users to register and login to their account via the webpage.

My current runner.java is as follows:

package wpd2.lab1;

import wpd2.lab1.servlet.DemoServlet;
import wpd2.lab1.servlet.Register;
import wpd2.lab1.servlet.TestServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import wpd2.lab1.servlet.Welcome;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Runner {



@SuppressWarnings("unused")
private static final Logger LOG = LoggerFactory.getLogger(Runner.class);

private static final int PORT = 420;
private final String shopName;

private Runner(String shopName) {
    this.shopName = shopName;
}

private void start() throws Exception {
    Server server = new Server(PORT);

    ServletContextHandler handler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
    handler.setContextPath("/");
    handler.setInitParameter("org.eclipse.jetty.servlet.Default." + "resourceBase", "src/main/resources/webapp");

    DemoServlet demoServlet = new DemoServlet(shopName);
    handler.addServlet(new ServletHolder(demoServlet), "/shop/*");

    TestServlet testServlet = new TestServlet();
    handler.addServlet(new ServletHolder(testServlet), "/test");

    Welcome welcome = new Welcome();
    handler.addServlet(new ServletHolder(testServlet), "/welcome");

    Register register = new Register();
    handler.addServlet(new ServletHolder(register), "/register");


    DefaultServlet ds = new DefaultServlet();
    handler.addServlet(new ServletHolder(ds), "/");

    server.start();
    LOG.info("Server started, will run until terminated");
    server.join();

}




public static void main(String[] args) {

    try {
        Class.forName("org.h2.Driver");
        try {
            Connection conn =DriverManager.getConnection("jdbc:h2:~/test", "", "");
            Statement st = conn.createStatement();
            st.execute("CREATE TABLE USERINFO(USERNAME VARCHAR(255) PRIMARY KEY, PASSWORD VARCHAR(255))");
            System.out.println("created");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }


    try {
        LOG.info("starting");
        new Runner("Demo Shop").start();
    } catch (Exception e) {
        LOG.error("Unexpected error running shop: " + e.getMessage());
    }
}
}

When I run this, I can access the page but the database isn't created so when I try and register a new user I get a bunch of errors because of it.

I have also just noticed this error at the top of the logger when I run runner.java. Although the runner continues to run.

org.h2.jdbc.JdbcSQLException: Wrong user name or password [28000-194]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.engine.Engine.validateUserAndPassword(Engine.java:336)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:162)
at org.h2.engine.Engine.createSession(Engine.java:137)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:354)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:116)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:100)
at org.h2.Driver.connect(Driver.java:69)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at wpd2.lab1.Runner.main(Runner.java:74)

I am really unsure what I am doing wrong and any help would be appreciated.




Aucun commentaire:

Enregistrer un commentaire