2015-04-06 2 views
0

все!Приложение Java не может подключиться к базе данных mysql в openshift

Я использую бесплатную учетную запись OpenShift от RedHat PaaS для размещения моего приложения java. Для тестов я создал приложение, которое просто получает две информации о пользователе (логин и пароль) в index.jsp, затем выполняет поиск в базе данных и перенаправление на страницу успеха (сообщение «Доброе утро/afternoot/night, $ {user.name } ") или страницу сбоя (сообщение« Вы не зарегистрированы »). Я также создал базу данных, называемую autenticacao, с одной таблицей, называемой usuario (пользователем) в phpMyAdmin, и это хорошо работает в localhost. Но в openshift мой сервлет получает нулевой объект 'usuario' (user) из метода obter (String login, String senha), который должен получить результат одного запроса select. Я думаю, что он не создает соединение с базой данных. Я действительно так старался, чтобы он работал, и видел слишком много решений в foruns (также здесь, в stackoverflow), и ничего не работает.

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

Это мой DatabaseLocator.java: `

/* 
    * To change this license header, choose License Headers in Project Properties. 
    * To change this template file, choose Tools | Templates 
    * and open the template in the editor. 
    */ 
    package dao; 

    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.SQLException; 

    /** 
    * 
    * @author Luiz 
    */ 
    public class DatabaseLocator { 

     private static DatabaseLocator instance = new DatabaseLocator(); 

     public static DatabaseLocator getInstance() { 
     return instance; 
    } 

    private DatabaseLocator() { 

    } 

    public Connection getConnection() throws ClassNotFoundException, SQLException { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String user = System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"); 
     String password = System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"); 
     String url = System.getenv("OPENSHIFT_MYSQL_DB_URL"); 
     String host = System.getenv("OPENSHIFT_MYSQL_DB_HOST"); 
     String port = System.getenv("OPENSHIFT_MYSQL_DB_PORT"); 
     Connection conn 
       = DriverManager.getConnection(host+port+"/autenticacao",user,password); 
     return conn; 

    } 
} 

ошибка происходит, когда я пытаюсь создать соединение в St = conn.createStatement(); часть.

public Usuario obterUsuario(String login, String password) { 
    Usuario usuario = null; 
    Connection conn = null; 
    Statement st = null; 
    try { 
     conn = DatabaseLocator.getInstance().getConnection(); 
     st = conn.createStatement(); 
     ResultSet rs = st.executeQuery("select * from usuario where login='" + login + "' and senha='" + password + "'"); 
     rs.first(); 
     usuario = instanciar(rs); 
    } catch (ClassNotFoundException cnf) { 

    } catch (SQLException ex) { 
     System.out.println(ex.getCause()); 
    } 

    return usuario; 
} 

public static Usuario instanciar(ResultSet rs) throws SQLException, ClassNotFoundException { 
    Usuario usuario = new Usuario(); 
    usuario.setLogin(rs.getString("login")); 
    usuario.setSenha(rs.getString("senha")); 
    //other rs fields that would be setted to user object 
    return user; 
} 

}

Этот код в португальском, поэтому если любое слово не делает чувство, вы можете спросить меня. У меня есть другие классы, я могу показать это, если вы хотите.

Итак, как я могу подключиться к моей базе данных? Вы можете мне помочь? Благодарю.

+0

Что такое ошибка? Кроме того, у вас есть пустые блоки catch, которые могут затруднить отслеживание проблемы. – JamesB

+0

Также при обновлении кода замените executeQuery на подготовленноеСтанция: ваш код может быть взломан SQL Injection реальным простым способом. –

+0

Какая ошибка вы получаете? –

ответ

0

Вы все еще сталкиваетесь с этой проблемой? Если да, попробуйте сделать приложение openshift не масштабируемым, если оно настроено на масштабируемое и наоборот наоборот, если нет. Я столкнулся с этим, прежде чем я точно не помню. В вашем случае переадресация портов в openshift поможет, если вы не хотите изменять масштабируемость своего приложения. Я использую Jboss Dev Studio для создания моего приложения jboss в режиме спуска, если вы также хотите jboss.

+0

Я не знаю, масштабируема ли она, я думаю, что нет. Я создал проект в плагине Eclipse wth JBOSS, я думаю, что это тот же JB Dev Studio. Но теперь вы можете подключиться к базе данных mysql? Во всяком случае, я попробую это. –

0

Вам нужно изменить строку:

Connection conn = DriverManager.getConnection(host+port+"/autenticacao",user,password); 

Оно должно быть:

Connection conn = DriverManager.getConnection("jdbc:mysql:"+host+":"+port+"/autenticacao",user,password); 
Смежные вопросы