все!Приложение 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;
}
}
Этот код в португальском, поэтому если любое слово не делает чувство, вы можете спросить меня. У меня есть другие классы, я могу показать это, если вы хотите.
Итак, как я могу подключиться к моей базе данных? Вы можете мне помочь? Благодарю.
Что такое ошибка? Кроме того, у вас есть пустые блоки catch, которые могут затруднить отслеживание проблемы. – JamesB
Также при обновлении кода замените executeQuery на подготовленноеСтанция: ваш код может быть взломан SQL Injection реальным простым способом. –
Какая ошибка вы получаете? –