大家好!
我正在使用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;
}
}
这段代码是葡萄牙语,所以如果任何单词都没有意义,你可以问我。我有一些其他课程,如果你愿意我可以展示。
那么,我该如何连接到我的数据库?你能帮助我吗?感谢。
答案 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);