Как запустить SQL скрип в идее сообщества? - PullRequest
0 голосов
/ 05 октября 2018

Я работаю с сервлетами и базой данных.Я столкнулся с проблемой.У меня есть сценарий sql, который заполняет мою базу данных значениями по умолчанию.

DROP TABLE roles;
DROP TABLE users;

CREATE table roles(
  id int NOT NULL PRIMARY KEY,
  name varchar(10) not null UNIQUE
);

insert into roles(id, name) values (0, 'admin');
insert into roles(id, name) values (1, 'client');

    create table users(
      id int not null AUTO_INCREMENT,
      first_name varchar(20) not null,
      last_name varchar(20) not null,
      email varchar(30) not null unique,
      password varchar(20) not null,
      blocked boolean default false,
      avatar varchar(20) not null,
      role_id int not null references roles(id)
      ON DELETE CASCADE
      ON UPDATE RESTRICT
    );

    INSERT INTO users(id, first_name, last_name, email, password, blocked, avatar, role_id) VALUES(default, 'John', 'Smith', 'john.smith@gmail.com', '12345678Aa$', default, '2.png' 1);
    INSERT INTO users(id, first_name, last_name, email, password, blocked, avatar, role_id) VALUES(default, 'George', 'Anderson', 'george_anderson123@mail.ru', '12345678Aa$', true, '3.png', 1);

После этого я пытаюсь получить соединение с моей базой данных через BasicDataSource:

public static BasicDataSource getPoolConnection() {

        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/shop_db");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setConnectionProperties("useSSL=false;");
        return dataSource;
    }

Создание экземпляров:

public void contextInitialized(ServletContextEvent event) {
    BasicDataSource dataSource = ConnectionPool.getPoolConnection();

    UserService userService = new service.impl.UserService(dataSource);
}

Но после попытки регистрации нового пользователя я получаю нулевой указатель.Я думаю, что это связано с тем, что моя база данных пуста, когда я пытаюсь сравнить электронные письма в базе данных и введен в поле

@Override
public boolean isExist(String email) {
    return transactionManager.doInTransaction(
            connection ->
                    userDAO.isExist(email, connection)
    );
}

TransactionManager:

public TransactionManager(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public <T> T doInTransaction(TransactionOperation<T> operation) {
        T result = null;

        Connection connection = null;
        try {
            connection = dataSource.getConnection();
            connection.setAutoCommit(false);
            connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

            result = operation.operation(connection);

            connection.commit();
        } catch (SQLException e) {
            try {
                if (connection != null) {
                    connection.rollback();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally {
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

Как можноЯ запускаю сценарий sql для выполнения в версии сообщества?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...