Задать вопрос

Не происходит подключения к базе данных по URL?

Столкнулся проблемой — не могу подключиться к базе по URL. Т.е. есть сервлет, который подключается к базе и делает запрос. Изменив URL к реальной базе и залив весь проект на сервер, получил ошибку подключения к БД.
Воспроизвёл проблему путём создания на локали новой базы с именем est, до этого юзал базу с именем fermer, в дебаге получил такую картину: хоть я и изменил URL, программа всё равно пытается подконектиться к прошлой БД.
spoiler

5a9db08b56bff061833617.png
  • Вопрос задан
  • 125 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@nubus4000
Попробуйте так. В папку META-INF, что в webapp, добавить context.xml с содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <Resource name="jdbc/est"
              auth="Container"
              type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="root"
              password="root"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/est?useEncoding=true&amp;characterEncoding=UTF-8"/>
</Context>


После сделайте класс DaoUtil и напишите туда это(и лучше его доработать, он перегружен всякими if и т.п.):
public class DaoUtil {

    public static Connection getConnection(){
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            Context context = new InitialContext();
            Context initContext  = (Context )context.lookup("java:/comp/env");
            DataSource ds = (DataSource) initContext.lookup("jdbc/est");
            connection = ds.getConnection();
        }catch (SQLException | NamingException ex){
            ex.printStackTrace();
        }
        return connection;
    }

    public static void close(Statement statement, ResultSet rs,Connection connection){
        try {

            if (statement != null) {
                statement.close();
            }
            if (rs != null) {
                rs.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException ex){
            ex.printStackTrace();
        }
    }

}


Ну и в контроллере уже можно писать так:
Connection connection = DaoUtil.getConnection();

Ну и лучше работу с connection и всякими statement перенести в слой Dao.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы