Java应用程序无法连接到openshift中的mysql数据库

时间:2015-04-06 21:54:43

标签: java mysql database openshift

大家好!

我正在使用RedHat PaaS的OpenShift免费帐户来托管我的java应用程序。对于测试,我创建了一个只在index.jsp中获取两个用户信息(登录名和密码)的应用程序,然后搜索到数据库并重定向到成功页面(消息“早上好/下午/晚,$ {user.name }“)或失败页面(消息”你没有注册“)。我还创建了一个名为autenticacao的数据库,在phpMyAdmin中有一个名为usuario(user)的表,这在localhost中运行良好。但是在openshift中,我的servlet从方法obter(String login,String senha)接收一个空的'usuario'(用户)对象,它应该得到一个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;
}

}

这段代码是葡萄牙语,所以如果任何单词都没有意义,你可以问我。我有一些其他课程,如果你愿意我可以展示。

那么,我该如何连接到我的数据库?你能帮助我吗?感谢。

2 个答案:

答案 0 :(得分:0)

你还在面对这个问题吗?如果是,那么尝试使openhift应用程序不可扩展,如果它设置为可伸缩,反之亦然。在我不记得之前,我遇到过这个。在您的情况下,如果您不想更改应用程序的可伸缩性,openshift中的端口转发将有所帮助。我使用Jboss Dev Studio在openshift中创建我的jboss应用程序,以防你也想要jboss。

答案 1 :(得分:0)

您需要更改一行:

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

应该是:

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